温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java 成员变量赋值和构造方法哪个先执行

发布时间:2020-10-29 15:20:19 来源:亿速云 阅读:433 作者:Leah 栏目:开发技术

本篇文章给大家分享的是有关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 成员变量赋值和构造方法哪个先执行,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI