JAVA 构造函数变量初始化顺序
引言
在Java中,构造函数是一个特殊的方法,用于创建和初始化对象。在创建一个对象时,构造函数会被自动调用,并按照特定的顺序初始化类的成员变量。了解和掌握构造函数和变量初始化的顺序对于Java开发者来说是非常重要的。本文将向刚入行的小白介绍Java构造函数变量初始化顺序,并提供相应的代码和解释。
流程图
journey
title Java构造函数变量初始化顺序流程图
section 构造函数变量初始化顺序
[*] --> 创建对象
创建对象 --> 初始化父类静态变量
初始化父类静态变量 --> 初始化子类静态变量
初始化子类静态变量 --> 初始化父类实例变量和代码块
初始化父类实例变量和代码块 --> 调用父类构造函数
调用父类构造函数 --> 初始化子类实例变量和代码块
初始化子类实例变量和代码块 --> 调用子类构造函数
调用子类构造函数 --> 结束
详细步骤
步骤 | 代码示例 | 解释 |
---|---|---|
创建对象 | MyClass obj = new MyClass(); |
使用new 关键字创建一个对象实例,此时构造函数会被自动调用。 |
初始化父类静态变量 | static int parentStaticVariable = 10; |
首先,初始化父类的静态变量。静态变量与类相关,只会初始化一次,不会因为对象的创建而多次初始化。 |
初始化子类静态变量 | static int childStaticVariable = 20; |
接着,初始化子类的静态变量,同样只会初始化一次。 |
初始化父类实例变量和代码块 | int parentInstanceVariable; <br> static { parentStaticVariable = 30; } |
然后,初始化父类的实例变量和代码块。实例变量是对象的一部分,每个对象都有自己的实例变量,且在对象创建时被初始化。代码块用于在创建对象时执行一段代码。 |
调用父类构造函数 | public ParentClass() { ... } |
父类构造函数会执行父类的初始化过程,可以做一些必要的初始化操作。 |
初始化子类实例变量和代码块 | int childInstanceVariable; <br>{ childInstanceVariable = 40; } |
接着,初始化子类的实例变量和代码块。 |
调用子类构造函数 | public ChildClass() { super(); ... } |
子类构造函数会首先调用父类构造函数,然后执行子类的初始化过程。 |
结束 | 所有变量的初始化和构造函数的调用完成,对象创建完毕。 |
类图
classDiagram
class MyClass {
+MyClass()
}
class ParentClass {
-int parentInstanceVariable
+ParentClass()
}
class ChildClass {
-int childInstanceVariable
+ChildClass()
}
MyClass --> ParentClass
MyClass --> ChildClass
ChildClass --> ParentClass
示例代码
MyClass.java
public class MyClass {
public MyClass() {
// 构造函数
}
public static void main(String[] args) {
MyClass obj = new MyClass();
}
}
ParentClass.java
public class ParentClass {
static int parentStaticVariable = 10;
int parentInstanceVariable;
static {
parentStaticVariable = 30;
}
public ParentClass() {
// 父类构造函数
}
}
ChildClass.java
public class ChildClass extends ParentClass {
static int childStaticVariable = 20;
int childInstanceVariable;
{
childInstanceVariable = 40;
}
public ChildClass() {
super(); // 调用父类构造函数
// 子