黑马程序员技术交流社区

标题: 内部类是如何加载的?为什么内部类中有静态成员时,内部类必须定义成静态的? [打印本页]

作者: 马年出黑马    时间: 2014-4-8 06:52
标题: 内部类是如何加载的?为什么内部类中有静态成员时,内部类必须定义成静态的?
内部类是如何加载的?是随外部类的加载而加载的吗?为什么内部类中有静态成员时,内部类必须定义成静态的?发现内部类编译出的class文件名是Outer$Inner.class形式的,有何含义?

作者: shi0000    时间: 2014-4-8 11:25
如果内部类不是静态的,只有当调用时才会加载。如果是静态的就随类的加载而加载。
当内部类中有静态成员时,内部类必须是静态的,否则会报错。
编译后的.class文件显示的是成员内部类。
作者: 四川男人    时间: 2014-4-8 23:38
内部类的加载方式有两种:
一种是静态内部类,它是随着外部类声明对象或是new方式来实现方法的时候加载的,随外部类的加载而加载;
另一种是非静态内部类,当声明一个内部类的时候,用外部类的对象调用而加载的。方式:new Out().new Inter();
当内部类有静态成员的时候,内部类必须声明为静态的,因为非静态不能调用静态成员。
内部类的字节码文件名是Outer$Inner.class 说明内部类是静态的,静态内部类的调用方式是通过外部类名.内部类名。
作者: 曹冬明    时间: 2014-4-14 10:04
静态内部类也是相当于外部类的一个内部成员,类的静态成员都是随着类的加载而加载的,内部类随着外部类加载时候,你就把内部类也看成一个外部类,他被加载了,随着他加载的成员也应该是静态的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2