Java 不要在jvm中调试或运行,您能告诉我什么';输出结果是什么?

Java 不要在jvm中调试或运行,您能告诉我什么';输出结果是什么?,java,jvm,Java,Jvm,好的,新的B首先得到一个创建的实例字段,然后调用B的init(),它将i和j设置为100。然后创建B,将i初始化为0 package Test; public class A { public A() { System.out.println("Enter construct A..."); init(); } public void init() { System.out.println("Enter A's ini

好的,新的B首先得到一个创建的实例字段,然后调用B的init(),它将i和j设置为100。然后创建B,将i初始化为0

package Test;

public class A {

    public A() {
        System.out.println("Enter construct A...");
        init();
    }

    public void init() {
        System.out.println("Enter A's init...");
    }

}

package Test;

public class B extends A {

    int i = 0; 
    int j;

    public void init() {
        System.out.println("Enter B's init...");
        i = 100;
        j = 100;
    }

    public void printAll(){
        System.out.println(i);
        System.out.println(j);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        B b = new B();
        b.printAll();
    }

}
我想:

Enter construct A...
Enter B's init...
0
100
因为A构造函数必须被称为B,所以B可以被构造
由于您正在安装的类来自类型B,因此会调用B的init(没有super.init()调用,因此类B的init方法会隐藏超级类的init方法)

这是您在课堂上必须做的事情吗?此站点不是教室。你有什么问题吗?或者你不了解这个代码?嘿,这不是笔试,为什么无法运行代码?请查看关于什么类型的问题适用于堆栈溢出。我猜这是因为构造函数是在初始化非静态字段之前运行的。为什么它为i而不是0打印100?调用printall时,构造函数应该已经完成了编写答案。快乐编码!答案很好,看到JVM的奇怪行为非常有趣。如果您自己运行代码,Akku是正确的。
Enter construct A...
Enter B's init...
100
100