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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 倪杭乘 中级黑马   /  2012-5-14 08:50  /  2108 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内部类在加载的时候什么时候进方法区?
系统运行时加载外部类到方法区,内部类是不是在外部类那块方法区中,
当创建对象的时候是把内部类方法直接调用到栈内存还是将内部类加载到外部类外的方法区中。具体过程是怎么样的

7 个回复

倒序浏览
咋没人回答我呢~~~
回复 使用道具 举报
內部類不也是類,只有在用的時候才加載,并不隨著外部類加載就加載(比如在外部類中都沒用到內部類,那就不加載)
在java中調用對象,調用的都是對象的引用。對象都在堆裏面(內部類對象也好,外部類對象也好)
回复 使用道具 举报
不是非常明白
回复 使用道具 举报
内部类不是也能创建对象吗
回复 使用道具 举报
内部类就当与一个外部类的变量。把他当做普通变量就可以了。java把这种类封装在了一个类的内部,目的就是隐藏这个类。所以当我们需要的时候才加载进JVM,关于存在哪里,应该是存储在这个外部类的方法区所属的区域中吧。
确定一点:如果使用内部类,就必须要现有外部类对象。
如果这个内部类是静态的,就相当于一个外部类。

编译会生成这样两个字节码文件
Outer.class
Outer$Inner.class


回复 使用道具 举报
内部类是随着外部类加载到方法区的,因为内部类也有.class文件,当加载外部类时发现它有内部类,在加载完外部类之后,就开始加载内部类。“内部类是不是在外部类那块方法区中”,方法区只有一个,每个.class文件在方法区中是独立存放的。方法的调用肯定是要进方法栈的,不管是外部类的方法,还是内部类的方法。而方法栈只和线程有关,方法栈记录和跟踪线程对方法调用的过程。所以方法栈对每个线程调用方法的过程是分开记录的。
回复 使用道具 举报
补充一下:“当创建对象的时候是把内部类方法直接调用到栈内存还是将内部类加载到外部类外的方法区中”
创建对象时,是在堆内存中新建一个该类的对象。如果创建时调用了内部方法,方法只会进方法栈,而不会进方法区。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马