1、public class Test2 extends Test1
{
    {
        System.out.print("1"); 
    }
 
    Test2()
    { 
        System.out.print("2"); 
    }     static
    {
        System.out.print("3"); 
    }     { 
        System.out.print("4");     }     public static void main(String[] args)
    { 
        new Test2();     } } class Test1
{     Test1()
    { 
        System.out.print("5");
    }     static
    {
        System.out.print("6");
    } 
} 2、public class Test3 extends Test4
{
    int i=30;     Test3()
    {
        print();
        i=40;
    }     public static void main(String[] args) 
    {
        System.out.println(new Test3().i);
    }     void print()
    {
        System.out.println(i);
    } } class Test4 

    int i=10;    Test4()
    {
        print();
        i=20;
    }     void print()
    {        System.out.println(i);
    }
}  这两个题目非常变态,大家看看会输出什么.知道的,谁能给我解释下具体的原因,感激不尽..............
 

解决方案 »

  1.   

    看看《think in java 3》 里面里关于类的装载问题
    里面有关于static变量,实例变量,构造函数的调用相关问题
    是比较复杂
      

  2.   

    1.优先顺序
    static匿名方法>匿名方法>构造函数2.
    变量初始化>构造函数
    但是初始化流程如下Test3()入口->Test4()入口->Test4的变量->Test4()执行
    ->Test3变量->Test3()执行然而很巧的是你在Test3和Test4中用了同一个名字的方法,造成了override
    所以调用的是Test3的print()方法
    此时Test3.i还没有被初始化,所以是0
      

  3.   

    感谢,zdjray(PubSoft) ,
    应该是这样,我明白了.....