A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

内部类是如何加载的?是随外部类的加载而加载的吗?为什么内部类中有静态成员时,内部类必须定义成静态的?发现内部类编译出的class文件名是Outer$Inner.class形式的,有何含义?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

3 个回复

倒序浏览
如果内部类不是静态的,只有当调用时才会加载。如果是静态的就随类的加载而加载。
当内部类中有静态成员时,内部类必须是静态的,否则会报错。
编译后的.class文件显示的是成员内部类。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
内部类的加载方式有两种:
一种是静态内部类,它是随着外部类声明对象或是new方式来实现方法的时候加载的,随外部类的加载而加载;
另一种是非静态内部类,当声明一个内部类的时候,用外部类的对象调用而加载的。方式:new Out().new Inter();
当内部类有静态成员的时候,内部类必须声明为静态的,因为非静态不能调用静态成员。
内部类的字节码文件名是Outer$Inner.class 说明内部类是静态的,静态内部类的调用方式是通过外部类名.内部类名。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
静态内部类也是相当于外部类的一个内部成员,类的静态成员都是随着类的加载而加载的,内部类随着外部类加载时候,你就把内部类也看成一个外部类,他被加载了,随着他加载的成员也应该是静态的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马