| 本帖最后由 kkopopo 于 2014-2-25 09:57 编辑 
 先mark  楼主这个问题犀利!
 复制代码class Outer{
    private int x = 3;
    class Inner{
        public void function(){
            System.out.println("内部类"+x);
        }
    }
}
class Test{
        public static void main(String[] args) throws Exception{
                System.out.println(Class.forName("com.itcast.day01.Outer"));
        }
}
编译时期上面代码 javac Test.java  产生了3个.class
 Test.class
 Outer.class
 Outer$Inner.class
 我理解的编译时期和运行
 编译:给房子打草图------房子里面有小房子(卧室)-----也需要打草图
 运行: 开始按照草图盖房子----为了防止盖得房子有偏差在盖之前就编译一下(打个草图)
 字节码是对象的模板,那么在编译时期,模板是要先刻画好的,验证第一段代码
 
 
 复制代码class Outer{
    private int x = 3;
    class Inner{//内部类直接访问外部类成员,包括私有
        public void function(){
            System.out.println("内部类"+x);
        }
    }
    static{
            Outer out = new Outer();
        Inner in = new Outer().new Inner();
        System.out.println(in.getClass());
        System.out.println(out.getClass());
    }
}
class Test{
        public static void main(String[] args) throws Exception{
                System.out.println(Class.forName("com.itcast.day01.Outer"));
                //问题在于如何用反射得到内部类字节码?
                //System.out.println(Class.forName("com.itcast.day01.Outer.Inner"));
        }
}
输出结果:
 class com.itcast.day01.Outer$Inner
 class com.itcast.day01.Outer
 class com.itcast.day01.Outer
 
 Class.forName()会实现类的初始化,即静态块的运行,
 运行时期,没有外部类的对象,即我们的大房子,何来的小房子(厕所,厨房,卧室)
 所以我用静态块实现了一下
 
 解决楼主问题:
 1.之间的关系:
 我们在画大房子的草图之前能画出厨房的草图吗? 不能,只有我们把大房子的基本图画完了才能!
 2,即他们可以相互获取对方吗?
 楼主明白我们为啥要获取字节码吗? 为啥要他们之间相互获取?
 
 
 
 最后2句话:
 内部类在内存的哪个部分?  栈,堆,方法区,....?
 鄙人完全不懂类在初始化时内存里发生了什么,望见谅!
 
 |