请问这个题执行顺序是什么

》》》》》》问题1
package java_study;
/**

  • 请说出下列代码的输出结果
    */
    public class A {

    private static A a = new A();

    private C c = new C();

    static {
    System.out.println("3");
    }

    public A() {
    System.out.println("4");
    }

    public static void main(String[] args) {

    System.out.println("Hello");

    }

}

//定义一个父类B

class B{

B(){
    System.out.println("B的构造方法");
}

}

//定义一个子类C 继承 B

class C extends B{

static {
    System.out.println("1");
}
public C(){
    super();
    System.out.println("2");
}

}

》》》》》》》》问题2
如果该父类引用所调用的方法参数列表未定义,就调用该父类的父类中查找,如果还没找到就强制向上类型转换参数列表中的参数类型,具体优先级高到低依次如下:

this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。

能给我解释一下这方面的问题吗??


杨魅力
浏览 454回答 2
2回答

一只斗牛犬

执行结果:1B的构造方法243Hello虚拟机首先,会加载类的信息,如果类中有静态方法,则会执行静态方法,有多个静态方法,则按顺序执行,构造方法则是在实例化该类(创建对象)时才调用。虚拟机首先,优先加载含有main函数的主类,所以先加载A类,发现A类中有一个静态代码成员,所以先执行private static A a = new A();new A()则是创建对象了,就会执行A的构造函数,实例化A的时候,会初始化A的成员变量,也就是:private C c = new C();这时,虚拟机会先去加载C的类信息,发现其中也有静态方法,则会执行:static {     System.out.println("1"); }加载完后,会接着刚刚的程序,接着实例化C:public C(){     super();     System.out.println("2"); }这个spuer();则是构造父类了,然后就会去构造B:B(){     System.out.println("B的构造方法"); }执行完后,接着刚刚的C的构造方法执行:System.out.println("2");此时,A类的成员变量已经初始化完毕了,可以构造A类了,执行A的构造函数:public A() { System.out.println("4"); }此时,A的第一个静态方法执行完毕,执行第二个静态方法:static {             System.out.println("3");         }执行完后,所有的类信息都加载完毕了,然后执行主函数:public static void main(String[] args) { System.out.println("Hello"); }希望对你有帮助

UYOU

1B的构造方法243hello关键点在于new方法发生了什么.虚拟机加载类信息->虚拟机初始化对象-->对象在虚拟机中初始化完成->执行java中new方法可以看到 自己写的new方法(构造器)尚未执行时对象就已经初始化完成了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java