问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java构造函数的运行时序

发布网友 发布时间:2022-05-06 19:46

我来回答

2个回答

热心网友 时间:2023-09-14 00:54

首先假设有如下的一些辅助类,这些类被其他类使用作为静态变量或非静态变量:

Java代码 收藏代码
1.public class C {
2. public C() {
3. System.out.println("C");
4. }
5.}
6.
7.public class E {
8. public E() {
9. System.out.println("E");
10. }
11.}
12.
13.public class F {
14. public F() {
15. System.out.println("F");
16. }
17.}
18.
19.public class G {
20. public G() {
21. System.out.println("G");
22. }
23.}
24.
25.
26.public class H {
27. public H() {
28. System.out.println("H");
29. }
30.}

1)继承自Object的类的构造函数的执行顺序:
假设有如下的一个类I,I的定义如下:

Java代码 收藏代码
1.public class I {
2. public G g = new G();
3. public static E statice0 = new E();
4. static {
5. statice0 = new E();
6. System.out.println("判断static执行的顺序");
7. }
8. public static E statice1;
9. public static F f1;
10. static {
11. System.out.println("测试在static块中执行的顺序1");
12. statice1 = new E();
13. f1 = new F();
14. }
15. static {
16. System.out.println("测试在static块中执行的顺序2");
17. f1 = new F();
18. statice1 = new E();
19. }
20. public static H h = new H();
21.
22. public E e;
23. {
24. System.out.println("aaa");
25. e = new E();
26. }
27.
28. public I(int i) {
29. statice0 = new E();
30. f1 = new F();
31. e = new E();
32. }
33.
34. public static void main(String[] args) {
35. I i = new I(1);
36. }
37.}

执行结果:
E
E
判断static执行的顺序
测试在static块中执行的顺序1
E
F
测试在static块中执行的顺序2
F
E
H
G
aaa
E
F
H
E
从这个结果来可以知道,从Object派生的类将会按照如下的书序执行:
1、静态变量,如果有静态块的话,则按照静态块中变量new的顺序执行静态变量构造函数。如果没有静态块的话,则按照声明的顺序执行。
2、非静态变量,如果有非静态变量初始化块的话,则按照new的顺序执行构造函数,如果没有初始化块则按照声明的顺序执行。
3、执行构造函数,所有的变量按照new的顺序执行构造函数。

2)如果是从非Object类结成的类
看如下的类:

Java代码 收藏代码
1.public class A {
2. private static E e = new E();
3. private F f = new F();
4.
5. public A() {
6. Syst www.hnne.com em.out.println("A");
7. }
8.}
9.
10.public class B extends A {
11. private static D d = new D();
12. private C c = new C();
13.
14. public B() {
15. System.out.println("B");
16. }
17.
18. public static void main(String[] args) {
19. B b = new B();
20. }
21.}
22.
23.
24.public class C {
25. public static E e = new E();
26. public C() {
27. System.out.println("C");
28. }
29.}

执行B中的main,则会打印出如下的结果:
E
H
G
D
F
A
E
C
B

首先分析各个类的调用情况,在父类A中有一个E的静态变量,和一个F的非静态变量,B类继承自A,B有一个D的静态变量和C的非静态变量,D中又有一个H的静态变量和g的非静态变量。
从执行得到的结果可以得到如下的结论:
1、首先执行父类中的静态变量的构造函数,在执行构造函数之前执行静态变量的类中的静态变量的构造函数。因此在上例中首先输出:E
2、执行本类的静态变量的构造函数,同上,需要执行静态变量的类中的静态变量的构造函数。上例中会在执行了A中的E的静态变量后执行D的静态变量的构造函数,在此之前需要执行D中的静态变量H的构造函数,然后执行D中的非静态变量G的构造函数。打印出:H G D
3、执行父类中的非静态变量的构造函数。打印出:f
4、执行父类的构造函数。打印出: A
5、执行本类的非静态变量的构造函数,打印出:E C
6、执行本类中的构造函数,按照new的顺序执行构造函数。打印出:B

热心网友 时间:2023-09-14 00:54

应该先运行父类的构造函数 在运行自己的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
远得要命的爱情丁菲是谁演的 远的要命的爱情里的乔佳影是谁演的 远得要命的爱情乔佳影是什么角色 问。。我在厦门办的银行卡回江西可以用吗? 远得要命的爱情中的乔佳影是个怎样的人 厦门农信社的公告出来了,想问一下银行合同制和劳务派遣和正式工的区别... 厦门的信用社银联卡到南宁能不能用?要不要手续费? 泉州农信社年前新办的卡,存了钱,银行说三个工作日后才能动这个钱,为什 ... ...女鞋的话 是不是必须直通车 我们鞋子都是20---50鞋子利润低 直通车... 拼多多直通车200红包(拼多多直通车每天烧1000) 帅哥追美女什么用什么招! 帅哥和美女 的下联 泉州美女最多帅哥最多的群是哪个 烦恼~~~美女帅哥进来帮下偶! 美女帅哥们~~~救命啊~~~ 已婚女人在哪儿?老公常年出差?喜欢小帅哥吗?一个晚上6回,每回20到40多分钟。 使用Hibernate的HQL怎么条件查询老师返回空的list?高手帮忙看看 如何用红外线摄像机拍摄人体温度 上海浦东新区消杀研究所的蟑螂全杀绝效果怎么样 红外摄像机的主要技术指标都有哪些? 红外摄像机夜视效果很差,有光圈,雪点,但是在白天,红外摄像机的图像很清晰? 有个人拦着我让我扫个码是微信辅助,我点了确认,有什么风险没,求真实回答 红外摄像机夜间无图像是什么原因? 如何辨别红外摄像机的灯芯是正芯还是散芯? 薄荷网是传统app还是微信端app 怎样判断红外摄像机的CCD芯片型号是否是SONY的 梦见自己生病输液满嘴血.但没吐出来 梦到牙齿出血,玉手镯碎了是什么意思? 街道自己招聘的和社区工作者有什么区别 梦见自己输液流血 java继承中构造函数的调用顺序 构造函数的调用顺序 java 类中定义一个类,这两个类构造函数先后问题 Java中成员变量赋值和构造函数谁先执行? 请问Java中构造函数的执行顺序是否与虚拟机有关 精益生产物料控制流程是什么? java中主函数和构造函数谁先加载 我是初学JAVA者,谁知道JAVA中main方法、方法、构造器、对象等等一些成员的代码运行的顺序啊 家里安装的净水器,什么样的比较好 家用净水器那么多 要选哪种 怎么选 java中静态方法,静态变量,静态初始化器,构造函数,属性初始化都是什么时候调用的? 它们的先后顺序。 如何进行现场管理之物料管理 java中当static块和构造函数同时出现,顺序是什么样? 净水器品牌选ao史密斯如何?值得购买吗? 定妆粉的使用? 用什么工具上散粉? getHibernateTemplate() .find("")返回值null 国产房车品牌中排名第一的是哪家? 国产房车哪家的比较好? 国产房车,哪个牌子比