关键词不能为空

当前您在: 主页 > 英语 >

作者:高考题库网
来源: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
    上一篇:没有了
    下一篇:没有了

的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文