public   class   Parent   { 
        public   void   test()   { 
        }         public   Parent()   { 
                test(); 
        }         public   static   void   main(String[]   args)   { 
                new   Child(); 
        } 

class   Child   extends   Parent   { 
        private   int   instanceValue   =   20;         public   Child()   { 
        }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
        public   void   test()   { 
                System.out.println( "instance   value   is:   "   +   instanceValue); 
        } 

输出结果为什么是 instance   value   is:   0

解决方案 »

  1.   

    它的执行过程是1      new  Child(); 2      public  Child()  { 
                }           3      public  Parent()  { 
                    test(); 
                 } 4        public  void  test()  { 
                    System.out.println( "instance  value  is:  "  +  instanceValue); 
                  } 5       private  int  instanceValue  =  20; 
      

  2.   

    偶也不懂,没有很细致地读一些关于jvm的东西,下面是google到的一些东西:
     
    除接口以外,初始化一个类之前必须保证其直接超类已被初始化,并且该初始化过程是由 Jvm 保证线程安全的。按你这个例子说的话,超类的初始化应该在给实例变量以前就已经在给超类初始化了.
      

  3.   


    public  class  Parent  { 
            public  void  test()  { 
             System.out.println("Parent_test");
            }         public  Parent()  { 
                   System.out.println("Parent");
                    test(); 
            }         public  static  void  main(String[]  args)  { 
                    new  Child(); 
            } 

    class  Child  extends  Parent  { 
            public  int  instanceValue  =  20;         public  Child()  { 
             System.out.println("Child");
            }                                                                                                                                                                                                            
            public  void  test()  { 
                   System.out.println("Child_test");
                    System.out.println( "instance  value  is:  "  +  instanceValue); 
            } 
    } 加打印语句,看看执行的顺序,你就明白了
    结果:Parent
    Child_test
    instan value is: 0
    Child
      

  4.   

    楼上的,我可是在编译器中DEBUG的过程啊,记录下来的步骤啊