A、B、C处的执行结果是什么? 

解决方案 »

  1.   

    A:1a2b
    B:2b
    C:2b
    静态块只执行一次父类静态代码块 > 子类静态代码块 > 父类构造函数 > 子类构造函数(先有父亲,后有孩子)
    如果是多级继承关系的话,最高层的父类首先执行,然后依次递减
    总结:静态优先执行,父类优先执行
    注意:静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次
    构造方法和静态代码块的区别
    静态代码块 当且仅当第一次执行的时候才执行,一般用于初始化。
    而构造方法 是每次new对象的时候都执行,也是初始化
    二者的区别在于 一个是仅执行一次 另一个是每次new对象的时候执行
    所以初始化代码 写在那个部分里就要根据具体情况而进行选择
      

  2.   

    还有一种情况非静态块
    如:

         System.out.print("什么情况下执行");
     }它是什么情况下执行,又执行多少次呢?
      

  3.   

      静态块只执行一次 ,在jvm加载类文件的时候就执行。
      

  4.   

    如: 
    class A { 
    static { 
    System.out.print("1"); 
    } { 
      System.out.print("ok"); 
     } 
    public A() { 
    System.out.print("2"); 


    class B extends A { 
    static { 
    System.out.print("a"); 
    } public B() { 
    System.out.print("b"); 

    } public class Hello{ 
      public static void main(String[] ars){ 
        A ab = new B(); //记为A。执行到此处,结果是: 
        ab = new B(); //记为B。执行到此处,结果是: 
        B bb=new B();//记为C。执行到此处,结果是: 
      } 
    } A、B、C处的执行结果是什么? 
      

  5.   

    静态块有可能不只执行一次的,至少在jvm层次上有可能执行多次。
    楼主想知道原理要看虚拟机规范,不过这样的问题对java程序开发并没有多大帮助就是了。
      

  6.   

    执行当然是可以多次执行,我想你问的是会被载入几次吧?我可以很负责的告诉你Java中的静态类是可以多次载入的,实用Java反射,
    例如
    Class c1 = Class.ForName("A.class"); 
    这种载入方式载入类的时候静态方法就只执行一次。
    Class c2 = Class.ForName("A.class",true,null);
    这种方式第二个参数就是载入类时是否调用静态方法。
    JAVA深度历险第二章 深入类别载入器,你可以看看。
      

  7.   


    楼主可以在Eclipse拷贝运行一下,看看结果是什么,增强自己的体会