在 Java 中创建对象时,调用的方法顺序,包括普通方法
时间: 2024-03-07 16:53:22 浏览: 84
在 Java 中创建对象时,调用的方法顺序包括普通方法如下:
1. 分配内存空间:在内存中为对象分配空间。
2. 初始化成员变量:初始化对象的成员变量,包括显式赋值和默认值赋值。
3. 调用父类构造方法:如果该类有父类,则调用父类的构造方法。
4. 执行构造方法:执行该类的构造方法,完成对象的初始化。
5. 调用普通方法:在对象创建后,可以调用其它方法来对对象进行操作。
需要注意的是,父类的构造方法会在子类构造方法之前被调用,以确保所有的成员变量都被正确地初始化。如果子类的构造方法中没有显式地调用父类的构造方法,则 Java 会自动调用父类的无参数构造方法。如果父类没有无参数构造方法,则必须在子类的构造方法中显式地调用父类的有参数构造方法。
在对象创建后,可以调用其它方法来对对象进行操作。需要注意的是,在调用对象的方法之前,对象的成员变量必须已经被正确地初始化。
相关问题
用下面知识点-初始化代码块和构造函数 加载顺序: 加载类 --> 静态变量、静态代码块(先后顺序加载) --> 成员变量、普通代码块 --> 构造方法 父类静态变量、静态代码块 --> 子类静态变量、静态代码块 --> 父类成员变量、普通代码块--> 父类构造方法----> 子类成员变量、普通代码块--> 子类构造方法 静态代码块(只加载一次) 构造方法(创建一个实例就加载一次) 静态方法需要调用才会执行 【题目】在Test.java文件中创建一个公共类Test,同时在文件中创建三个类Root、Mid和Leaf,其中Leaf继承Mid,Mid继承Root;为三个类提供类初始化块和实例初始化块,在Mid类里使用this调用重载的构造器,而Leaf使用super显示调用其父类指定的构造器。在Test类的main方法中分别创建两个Leaf类的对象,验证初始化代码块及构造函数的执行顺序。
以下是Test.java文件的代码:
```
public class Test {
public static void main(String[] args) {
Leaf leaf1 = new Leaf();
Leaf leaf2 = new Leaf();
}
}
class Root {
static {
System.out.println("Root的静态代码块");
}
{
System.out.println("Root的实例代码块");
}
public Root() {
System.out.println("Root的构造函数");
}
}
class Mid extends Root {
static {
System.out.println("Mid的静态代码块");
}
{
System.out.println("Mid的实例代码块");
}
public Mid() {
this("调用重载的构造器");
System.out.println("Mid的无参构造函数");
}
public Mid(String s) {
System.out.println("Mid的带参构造函数:" + s);
}
}
class Leaf extends Mid {
static {
System.out.println("Leaf的静态代码块");
}
{
System.out.println("Leaf的实例代码块");
}
public Leaf() {
super("调用父类指定的构造器");
System.out.println("Leaf的无参构造函数");
}
}
```
输出结果为:
```
Root的静态代码块
Mid的静态代码块
Leaf的静态代码块
Root的实例代码块
Root的构造函数
Mid的实例代码块
Mid的带参构造函数:调用重载的构造器
Mid的无参构造函数
Leaf的实例代码块
Leaf的带参构造函数:调用父类指定的构造器
Leaf的无参构造函数
Root的实例代码块
Root的构造函数
Mid的实例代码块
Mid的带参构造函数:调用重载的构造器
Mid的无参构造函数
Leaf的实例代码块
Leaf的带参构造函数:调用父类指定的构造器
Leaf的无参构造函数
```
可以看到,初始化代码块和构造函数的执行顺序符合题目中所给的加载顺序。同时,Leaf类使用super显示调用其父类指定的构造器,而Mid类使用this调用重载的构造器,验证了题目中的要求。
java构造方法执行前先调用普通代码块
在 Java 中,我们可以使用普通代码块(也称为实例初始化块)来在构造方法执行之前执行一些代码逻辑。普通代码块是定义在类中但不属于任何方法的代码块,使用花括号 `{}` 包围。
当创建对象时,会先执行普通代码块中的代码,然后再执行构造方法。这样可以在构造方法执行前对对象进行一些初始化操作或者执行其他的逻辑。
下面是一个示例代码来说明普通代码块的执行顺序:
```java
public class MyClass {
{
// 这里是普通代码块
System.out.println("普通代码块被执行");
}
public MyClass() {
System.out.println("构造方法被执行");
}
public static void main(String[] args) {
MyClass obj = new MyClass();
}
}
```
输出结果为:
```
普通代码块被执行
构造方法被执行
```
可以看到,在创建 `MyClass` 对象时,先执行普通代码块中的代码,然后再执行构造方法。这样可以确保在构造方法执行之前,我们可以对对象进行一些额外的初始化或者其他操作。
阅读全文