gpt4 book ai didi

java - Java中的类初始化过程

转载 作者:行者123 更新时间:2023-11-30 10:17:17 24 4
gpt4 key购买 nike

我有两个类:TestClass2 和 TestClass3。 TestClass3 扩展了 TestClass2。

    public class TestClass2 {
static int i=10;
static int k=TestClass3.j+100;
}


public class TestClass3 extends TestClass2{
static int j=20;
}

现在当我在另一个类(class)打印时:

public static void main(String[] args) {
System.out.println(TestClass3.j);
System.out.println(TestClass2.k);
}

我得到的结果是 20100

但是当我只是打印 TestClass2.K(如下所示)时,我得到的结果是 120。

 public static void main(String[] args) {
System.out.println(TestClass2.k);
}

有人可以解释为什么会发生这种情况吗?

最佳答案

让我们看看下面的 java 程序。

public class Inheritance {
static class TestClass2 {
static int i=10;
static int k=TestClass3.j+100;

static
{
System.out.println("TestClass2 class : " + k);
System.out.println("TestClass3 j : " + TestClass3.j);
}

}

static class TestClass3 extends TestClass2{
static int j=20;

static
{
System.out.println("TestClass3 class : " + j);
}


}

public static void main(String[] args) {
System.out.println(TestClass3.j);
System.out.println(TestClass2.k);
}

}

输出类似于:

TestClass2 class : 100
TestClass3 j : 0
TestClass3 class : 20
20
100

调用继承TestClass2的TestClass3时,首先初始化TestClass2。

正如您在控制台消息中看到的,我们有一个像这样的继承树:

测试类2 > 测试类3

因此,TestClass3 的静态/类变量 j 将作为默认值零,因此输出必须为 100。

把main方法的第一行代码注释掉,就可以看到接下来的结果了;

TestClass3 class : 20
TestClass2 class : 120
TestClass3 j : 20
120

在这种情况下,TestClass 2 的类变量 k 和 TestClass 3 的 j 分别初始化。所以,现在我们有 120 作为输出。

关于java - Java中的类初始化过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49743851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com