黑马程序员: 关于内部类的一个思考

来源:互联网 发布:oracle数据库巡检模板 编辑:程序博客网 时间:2024/06/05 19:09

------- android培训  java培训  java学习型博客、期待与您交流 -------

对内部类的学习花了我不少时间, 我还彻底地将<Thinking in Java 4th edtion>的那个章节彻底地看完.

以下是我对内部类的一个本质理解.

文章不长, 但绝对是 干货.

---------------------------------------------------------

对于非静态内部类, 其对象的空间中, 保留了一个指向外部类对象的指针.----这个很重要哦!
即, 意味着, 要创建非静态的内部类, 必须要有外部类对象先!
但是, 仅仅从外部类对象的空间, 是无法知道是否用这个外部类对象创建过其内部类对象, 
因为外部类的存储空间中没有相关的数据域指向对应的内部类对象的空间.
所以, 在外部类中, 我们不能直接访问内部类的成员;
而, 在内部类中, 我们却可以直接访问外部类的成员.
局部内部类(匿名内部类其实也是局部内部类的一种) 中, 我们可以直接访问其所在方法的局部变量.
----至于, 为什么这个局部变量要求是final我就不知道了. 
但我知道, JDK1.8的新特性是, 其不要求这个局部变量必须是final的.-----JDK1.8的新特性!

对于 静态内部类. 由于它是静态的, 所以其不依赖于外部类对象.
注意, 静态内部类也是可以有非静态成员的, 因此对静态内部类进行实例化也是有意义的, 
但这个实例化不依赖于外部类对象(因为静态内部类是外部类的静态成员).
即, 在静态内部类的对象的存储空间中, 没有指向外部类对象的域.----很重要哦!
所以, 在静态内部类中, 不能直接访问外部类的非静态成员, 而只能访问外部类的静态成员.
而外部类 能访问静态内部类的静态成员, 但是不能直接访问静态内部类的非静态成员.

------- android培训  java培训  java学习型博客、期待与您交流 -------

0 0
原创粉丝点击