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

》》》》》》问题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)。

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

2个回答

执行结果:
1
B的构造方法
2
4
3
Hello

虚拟机首先,会加载类的信息,如果类中有静态方法,则会执行静态方法,有多个静态方法,则按顺序执行,构造方法则是在实例化该类(创建对象)时才调用。
虚拟机首先,优先加载含有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");
}

希望对你有帮助

weixin_43587190
布丁没你甜 回复Your_Exios: class Fu{ int num=4; void show(){ System.out.println("showFu"); } } class Zi extends Fu{ int num = 5; void show(){ System.out.println("showZi"); } } public class Test1{ public static void main(String[] args){ Fu f=new Zi(); Zi z=new Zi(); System.out.println(f.num); System.out.println(z.num); f.show(); z.show(); } }
10 个月之前 回复
qq_43682859
Your_Exios 回复布丁没你甜: 2333,大佬算不上啦,还有什么问题,你说吧
10 个月之前 回复
weixin_43587190
布丁没你甜 谢谢大佬,豁然开朗
10 个月之前 回复
weixin_43587190
布丁没你甜 谢谢大佬,豁然开朗,还有个问题
10 个月之前 回复

1B的构造方法243hello
关键点在于new方法发生了什么.
虚拟机加载类信息->虚拟机初始化对象-->对象在虚拟机中初始化完成->执行java中new方法
可以看到 自己写的new方法(构造器)尚未执行时对象就已经初始化完成了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问