关键词不能为空

当前您在: 主页 > 英语 >

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
1970-01-01 08:00
tags:

-

2021年1月23日发(作者:story什么意思)
-JAVA
程序员
JAVA
工程师面试必看


JAVA
面试题解惑系列(一)
——
类的初始化顺序

关键字
: java
面试题

初始化

作者:臧圩人(
zangweiren


网址:


>>>
转载请注明出处!
<<<

大家在去参加面试 的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只
有构造器方法 和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出
到控制台 的代码,然后让我们判断输出的结果。这实际上是在考查我们对于继承情况下类的初始化顺序的了
解。< br>

我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们 的初始化顺序依次是(静态
变量、静态初始化块)
>
(变量、初始化块)
>< br>构造器。我们也可以通过下面的测试代码来验证这一点:

Java
代码

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.


public class InitialOrderTest {

//
静态变量

public static String staticField =
静态变量

//
变量

public String field =
变量


//
静态初始化块

static {
n(staticField);
n(
静态初始化块

}

//
初始化块

{
n(field);
n(
初始化块

}

//
构造器

public InitialOrderTest() {
n(
构造器

}

public static void main(String[] args) {
new InitialOrderTest();
}
}

运行以上代码,我们会得到如下的输出结果:

1.

静态变量

2.

静态初始化块

3.

变量

4.

初始化块

5.

构造器


这与上文中说的完全符合。那么对于继 承情况下又会怎样呢?我们仍然以一段测试代码来获取最终结果:

Java
代码

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

32.

33.

34.

35.

36.

37.

38.

39.

40.

41.

42.

43.

44.

45.

46.

47.

48.

49.

50.


class Parent {
//
静态变量

public static String p_StaticField =
父类
--
静态变量

//
变量

public String p_Field =
父类
--
变量


//
静态初始化块

static {
n(p_StaticField);
n(
父类
--
静态初始化块

}

//
初始化块

{
n(p_Field);
n(
父类
--
初始化块

}

//
构造器

public Parent() {
n(
父类
--
构造器

}
}

public class SubClass extends Parent {
//
静态变量

public static String s_StaticField =
子类
--
静态变量

//
变量

public String s_Field =
子类
--
变量

//
静态初始化块

static {
n(s_StaticField);
n(
子类
--
静态初始化块

}
//
初始化块

{
n(s_Field);
n(
子类
--
初始化块

}

//
构造器

public SubClass() {
n(
子类
--
构造器

}

//
程序入口

public static void main(String[] args) {
new SubClass();
}
}

运行一下上面的代码,结果马上呈现在我们的眼前:

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

父类
--
静态变量

父类
--
静态初始化块

子类
--
静态变量

子类
--
静态初始化块

父类
--
变量

父类
--
初始化块

父类
--
构造器

子类
--
变量

子类
--
初始化块

子类
--
构造器


现在,结果已经不言自明了。大家可 能会注意到一点,那就是,并不是父类完全初始化完毕后才进行子类的初
始化,实际上子类的静态变量和 静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成
了。


那么对于静态变量和静态初始化块之间、变量和初始化块之间的先后顺序又是怎样呢?是否静态变量总是 先于
静态初始化块,变量总是先于初始化块就被初始化了呢?实际上这取决于它们在类中出现的先后顺序 。我们以
静态变量和静态初始化块为例来进行说明。


同样,我们还是写一个类来进行测试:

Java
代码

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.


public class TestOrder {
//
静态变量

public static TestA a = new TestA();

//
静态初始化块

static {
n(
静态初始化块

}

//
静态变量

public static TestB b = new TestB();

public static void main(String[] args) {
new TestOrder();
}
}

class TestA {
public TestA() {
n(
}
}

class TestB {
public TestB() {
n(
}
}

运行上面的代码,会得到如下的结果:

-


-


-


-


-


-


-


-



本文更新与1970-01-01 08:00,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/553664.html
    上一篇:没有了
    下一篇:没有了

的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文