前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 构造函数是如何执行的「建议收藏」

java 构造函数是如何执行的「建议收藏」

作者头像
全栈程序员站长
发布2022-09-15 08:51:00
7990
发布2022-09-15 08:51:00
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

1.构造函数不是方法!!

原因1:方法的话,会直接执行方法体内的代码,但是构造函数首先执行的不是{}里的代码块,而是给对象的成员初始化;

2.方法可以被调用其他方法调用,但是构造函数不能被方法或变量调用。

package com.statics.www; public class Son { //构造函数执行第二步: private int num2=1*cal2(); //构造函数执行第一步: public static int num1=1*cal1(); //构造函数第0步: public static int cal1(){ System.out.println(“构造函数第一步:静态变量赋值!”); return 1; } public static int cal2(){ System.out.println(“构造函数第二步:非静态全局变量赋值”); return 2; } { System.out.println(“构造函数第三步:代码块!”); } public Son(){ System.out.println(“构造函数第四步:执行构造函数内部代码块!”); }

}

执行结果为:

java 构造函数是如何执行的「建议收藏」
java 构造函数是如何执行的「建议收藏」

2. 从上面测试得出结论:

构造函数初始化对象时,执行的顺序是

0.方法优先存在于任何变量或者对象,存在于类中,而不是对象中。即构造对象前,方法就存在。

第一步. 静态变量赋值

第二步.代码块或者全局变量,(执行顺序由代码位置决定,如果代码块在前,优先执行代码块;如果变量在前,优先变量赋值)

第三步.执行构造函数内部代码

3.继承中的构造函数执行顺序:

0.子类重写了父类的方法;

1.调用父类构造函数();

2.调用子类构造函数();

父类代码:

package com.statics.www;

public class Father { private int num=1; public Father(){ System.out.println(“构造father,接下来调用Test()”); Test(); } public void Test(){ System.out.println(“调用Father被重写的方法Test(),现在的Num值是”+num); } } 子类代码:

package com.statics.www; public class Son extends Father { private int num=1; public Son(){ System.out.println(“执行Son构造函数内部代码块!”); } public void Test(){ System.out.println(“调用Son被重写的方法Test(),现在的Num值是”+num); } }

java 构造函数是如何执行的「建议收藏」
java 构造函数是如何执行的「建议收藏」

可以看出被调用的Test()方法是子类的Test(),另外特别注意Num =0!!!!!!因为父类的num 是private的不能继承,但是子类的num还没有被赋值(要等到父类构造完成,才能构造子类),所以默认是0

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/156916.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月8,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档