新建对象的过程以及对象初始化顺序

本文详细解析了对象创建过程,包括方法区栈空间与堆中对象的构建,以及子类继承父类时的对象内存分配与构造方法调用顺序。特别强调了static代码块的执行时机与初始化的总体顺序。

对象创建的过程。

1,先在方法中创建栈空间,再在堆中创建对象,并对自己的成员变量赋值级代码块(基本数据的默认值)

2,对象调用自己的构造方法,构造方法进栈运行。

3,对象内存地址传递给this关键字。赋值操作等等。

4,构建方法运行结束,整个对象建立完成。

 

子类父类内存的创建过程。

1,创建子类对象,子类对象在同上创建,但划分两个区域储存。

2,子类对象一个区域留给父类,一个留给自己。

3,先实例化父类区域,完成父类区域赋值以及代码块的初始。

4,实例化子类区域,完成子类区域的事,

5,调用构造方法,进入父类构造方法,在进入子类构造方法。

6.构造方法结束,完成对象建立。

 

静态代码块在初始的时候第一步分配的时候直接执行并且只执行一次。

 

所以初始化的顺序。

总体是父类先于子类。

static代码块在最前面,且只执行一次。

代码块中或者属性的初始化(赋值),看代码书写先后顺序。

构造器,父类无参构造器然后子类构造器。

完成初始化。

 

 

### Java 中的对象初始化 在 Java 中,对象可以通过多种方式来完成初始化。当创建一个新的对象实例时,JVM 会按照特定顺序执行一系列操作以确保对象被正确初始化。 #### 对象初始化流程概述 对象初始化过程遵循以下步骤:加载字节码(仅首次加载),接着是字段初始化,随后调用父类构造函数,最后才是子类自身的构造函数[^3]。 #### 字段初始化 对于类中的属性,在声明的同时可以为其赋予初始值。这些赋值语句会在每次创建该类型的对象时被执行: ```java class Example { private int number = 10; } ``` #### 构造器初始化 通过定义构造方法可以在新对象创建过程中设置其状态。构造器允许程序员指定一些必要的参数用于配置新建对象的具体行为或特性: ```java public class Person { private final String name; public Person(String name) { this.name = name; } } ``` #### 使用静态代码块进行一次性初始化 如果某些资源只需要在整个应用程序生命周期内初始化一次,则可利用静态代码块实现这一点。这类代码将在第一次访问此类之前由 JVM 自动运行,并且只会发生一次: ```java class DatabaseConnection { static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(e); } } // Other members... } ``` #### 初始化示例 下面是一个完整的例子展示了如何在一个简单的 `Student` 类中应用上述概念来进行对象初始化: ```java // 定义 Student 类并提供默认和带参构造器 class Student { private String firstName; private String lastName; // 默认构造器 public Student() {} // 带参构造器 public Student(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } @Override public String toString() { return "Student{" + "firstName='" + firstName + '\'' + ", lastName='" + lastName + '\'' + '}'; } } // 测试程序入口点 public class MainApp { public static void main(String[] args) { // 创建未显式初始化的学生对象 Student studentA = new Student(); // 显式初始化学生对象的数据成员 Student studentB = new Student("John", "Doe"); System.out.println(studentA.toString()); System.out.println(studentB.toString()); } } ``` 此代码片段说明了不同情况下如何有效地初始化 Java 对象及其成员变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值