聊聊Java 成员变量赋值和构造方法谁先执行的问题
#代码知识 发布时间: 2026-01-12
对于这个问题应该用JVM的工作步骤来解释,首先看如下代码
class X {
Y b = new Y();
X() {
System.out.print("X");
}
}
class Y {
Y() {
System.out.print("Y");
}
}
public class Z extends X {
Y y = new Y();
Z() {
System.out.print("Z");
}
public static void main(String[] args) {
new Z(); //结果是 YXYZ
}
}
这段代码的执行过程如下:
1.在栈内存定义变量此时为初始值,定义方法。基本数据类型为0 ,引用数据类型为null
2. 调用父类构造方法,定义父类的属性和方法(如果子类已经重写父类的方法 这时不会被覆盖,整个过程不会发生任何覆盖的情 况)
3. 给父类的变量赋值。(此处即new了一个Y对象)
4. 执行父类构造方法中其他语句(此时它自己变量已经初始化和赋值完成,貌似很合理)
5. 给自己变量赋值(在堆内存创建对象或常量)(此处也是new了一个Y对象)
6. 执行构造方法中其他语句
铺垫的小知识:
第一个:成员变量有基本类型和引用类型的。
class Demo {
//基本类型
int x = 10;
//引用类型
Student s = new Student();
}
第二个:类的初始化过程
加载class文件
堆中开辟空间
变量的默认初始化
变量的显示初始化
构造代码块初始化
构造方法初始化
第三个:遇到extends,就要知道,先初始化父类数据,然后初始化子类数据。
分层初始化。
super在这里仅仅表示要先初始化父类数据。
补充知识:Java 设计一个Dog类,有名字、颜色、年龄等属性,定义构造方法来初始化类的这些属性,定义方法输出Dog信息。编写应用程序使用Dog类。
我就废话不多说了,大家还是直接看代码吧~
class Dog{
private String name,color;
private int age;
public Dog(String name,String color,int age){
this.name=name;
this.color=color;
this.age=age;
}
public void print(){
System.out.println("名字:"+name+" 颜色:"+color+" 年龄:"+age+"岁");
}
}
public class DogTest{
public static void main(String args[]){
Dog d=new Dog("哈士奇","白色",5);
d.print();
}
}
以上这篇聊聊Java 成员变量赋值和构造方法谁先执行的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
代码知识SEO上一篇 : 浅谈Java方法调用的优先级问题
下一篇 : Java父类继承中的static和final用法
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!