聊聊Java 成员变量赋值和构造方法谁先执行的问题

 更新时间:2020年10月07日 10:39:59   作者:come_alone  
这篇文章主要介绍了聊聊Java 成员变量赋值和构造方法谁先执行的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

对于这个问题应该用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 成员变量赋值和构造方法谁先执行的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 字符串压缩与解压的开发记录

    Java 字符串压缩与解压的开发记录

    这篇文章主要介绍了Java 字符串压缩与解压的开发记录,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • java中Hashmap的get方法使用

    java中Hashmap的get方法使用

    这篇文章主要介绍了java中Hashmap的get方法使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 深入解析Java编程中final关键字的作用

    深入解析Java编程中final关键字的作用

    final关键字正如其字面意思一样,意味着最后,比如被final修饰后类不能集成、变量不能被再赋值等,以下我们就来深入解析Java编程中final关键字的作用:
    2016-06-06
  • Spring项目运行依赖spring-contex解析

    Spring项目运行依赖spring-contex解析

    这篇文章主要介绍了Spring项目运行依赖spring-contex解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • java OOM内存泄漏原因及解决方法

    java OOM内存泄漏原因及解决方法

    这篇文章主要介绍了java OOM内存泄漏原因及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Java 泛型 Generic机制实例详解

    Java 泛型 Generic机制实例详解

    这篇文章主要为大家介绍了Java 泛型 Generic机制实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Java AtomicInteger类使用方法实例讲解

    Java AtomicInteger类使用方法实例讲解

    这篇文章主要介绍了Java AtomicInteger类使用方法实例讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Spring Boot优雅地处理404异常问题

    Spring Boot优雅地处理404异常问题

    这篇文章主要介绍了Spring Boot优雅地处理404异常问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Spring循环依赖实现过程揭秘

    Spring循环依赖实现过程揭秘

    这篇文章主要介绍了Spring循环依赖实现过程,Spring的解决循环依赖是有前置条件的,要解决循环依赖我们首先要了解Spring Bean对象的创建过程和依赖注入的方式
    2023-01-01
  • 解读@Data注解父子类继承的问题

    解读@Data注解父子类继承的问题

    在Java开发中,使用Lombok库的@Data注解简化了代码,但在父子类继承关系中使用@Data注解时会遇到问题,主要问题是:当父类和子类都使用@Data注解时,会导致equals方法不对称,解决方案是在子类中使用@EqualsAndHashCode注解
    2024-11-11

最新评论