写出执行A中的main方法后的执行结果
public class A{
   {
     System.out.println(“1”);
   }
  static {
          System.out.println(“2”);
         }
    public A(){
             System.out.println(“new A”);
    }
    public void print(){
      System.out.println(“print in A”);
   }
  public static void main(String[] args){
    A a = new B();
      a..print();
 }
}
class B extends A{
   {
     System.out.println(“3”);
   }
   static{
     System.out.println(“4”);
   }
   public B(){
     System.out.println(“new B”);
   }
   public void print(){
     super.print();
     System.out.println(“print in B”);
   }
}

解决方案 »

  1.   



    print in B
      

  2.   

    有点基础是否扎实的考验,
    我猜应该:用子类的实列来赋給父类,应该应该执行父类的静态块static,在执行子类的静态块
    再执行父类的构造方法,在执行子类的构造方法
    但运行后是:
    2
    4
    1
    new A
    3
    new B
    print in A
    print in B才看出来:静态块是最先执行没错,而 {}体 执行在构造方法之前
    学习了
      

  3.   

     A a = new B();  这句就使我发晕了,看了一会,才看明白了,学习了确实,基础不扎实,是很容易落马的
      

  4.   

    类似 A a = new B(); 
    这样父类的变量引用子类的实例的具体过程是什么样的?
    就是具体执行规则
      

  5.   

    2
    4
    1
    new A
    3
    new B
    print in A
    print in B
      

  6.   

    2//最先执行static代码块,构造方法之前
    4//最先执行static代码块,构造方法之前
    1//这个1为什么比new A 先执行?类都没有构造出来,怎么就执行了?new A
    3
    new B
    print in A
    print in B其他的好理解
      

  7.   

    我算是学习了 {}  这样的{System.out.print("");}  真是没见过
      

  8.   

    2
    4
    1
    New A
    3
    New B
    print in A
    print in B
    其实也就是在类被加载后,初始化的顺序问题 
    1:父类的静态成员,静态块 
    2:子类的静态成员,静态块 
    3:父类的非静态成员,非静态块,构造函数 
    4:子类的非静态成员,非静态块,构造函数