关于在外部对内部类进行实例化和引用
2016-10-06 16:47
260 查看
有些时候在写一些小的项目或者demo时,为了方便或者逻辑上归类往往定义一些内部类,比如一些小型的model,各种Adapter、BroadcastReceiver等等。
类似结构:
此时,对B进行实例化这样:
A.B b1 = new A.B();
b1.put();
此时类B作为类A中的静态成员,可以以A.B的形式对B进行访问而不必实例化A。 这种形式的优点是访问方便,清晰明了,不必持有A的引用;缺点是不利于在A与B之间进行数据传递。
例如:
此时将报错Cannot make a static reference to the non-static field str,即静态的成员不能持有非静态的成员的引用。 可以将str改为static,将B要访问的成员都改为static,但这会导致static的滥用违背面向对象的思想,还可能会造成内存泄漏。
另一种用法是将class B的static 修饰去掉
这样实例化
先取得A的引用,在借由A的实例对B进行实例化,由于此时B作为A的成员,因此B中可自由访问A类的其他成员。这种情况下A与B之间联系密切,实例化B必须取得A的引用。
当然,在项目规模较大而且考虑到后续的拓展,还是尽量采用合适的架构和写成独立的类。
类似结构:
class A{ static class B{ public void put(){ System.out.println("abc); } } }
此时,对B进行实例化这样:
A.B b1 = new A.B();
b1.put();
此时类B作为类A中的静态成员,可以以A.B的形式对B进行访问而不必实例化A。 这种形式的优点是访问方便,清晰明了,不必持有A的引用;缺点是不利于在A与B之间进行数据传递。
例如:
class A{ String str = "abc"; static class B{ public void put(){ System.out.println(str); } } }
此时将报错Cannot make a static reference to the non-static field str,即静态的成员不能持有非静态的成员的引用。 可以将str改为static,将B要访问的成员都改为static,但这会导致static的滥用违背面向对象的思想,还可能会造成内存泄漏。
另一种用法是将class B的static 修饰去掉
class A{ class B{ public void put(){ System.out.println("abc"); } } }
这样实例化
A a1 = new A(); A.B b1 = a1.new B(); b1.put();
先取得A的引用,在借由A的实例对B进行实例化,由于此时B作为A的成员,因此B中可自由访问A类的其他成员。这种情况下A与B之间联系密切,实例化B必须取得A的引用。
当然,在项目规模较大而且考虑到后续的拓展,还是尽量采用合适的架构和写成独立的类。
相关文章推荐
- 关于匿名内部类和局部内部类的外部引用必须是final的疑问
- 关于C++对函数传参与函数返回值进行引用传递的详解
- Java中 外部类如何对嵌套类进行实例化
- 关于“无法解析的外部符号”和“该符号在函数_wmain 中被引用”的问题
- 解决JAVA中内部类所对应的外部类引用初始化的问题
- 关于外部引用JS,中文乱码的问题
- 关于引用外部JS文件,再次警告大家
- 关于go程对外部变量的引用
- 关于<appSettings file="app.config" >引用外部文件的配置值
- Java 局部 final 变量与内部类引用外部变量
- 引用一个面试题:如果程序中没有任何变量引用一个外部类对象,但有变量引用其中的内部类对象,请问外部类对象是否会被垃圾回收器回收?请说明理由!
- 嵌套类引用实例化的外部类的方法
- 关于 error LNK2019:无法解析的外部符号 ,该符号在函数**中被引用的思考
- 外部类的静态方法内不能实例化内部类的对象
- 关于IE6下面引用外部js时document.getElementById报错的问题
- 前台--关于引用外部js文件的格式
- Java.内部类方法对外部类对象的引用x-this.x-Test.this.x
- 内部类如果要引用外部类的变量,则该变量必须为final
- 内部类与外部类变量同名时,如何在内部类中引用外部类变量?
- 文章汇总:关于java的finalize,引用和引用队列,自动释放系统外部资源的一些文章