类中静态代码块、构造函数的运行顺序
时间: 2023-11-08 11:06:23 浏览: 182
在一个类被实例化时,静态代码块和构造函数都会被执行,执行顺序如下:
1. 静态代码块:当类被加载时,静态代码块会被执行,且只会执行一次。
2. 构造函数:当类的实例被创建时,构造函数会被执行。
具体来说,静态代码块和静态变量的初始化会在构造函数之前执行。如果一个类中存在多个静态代码块,它们会按照在类中出现的顺序依次执行。而构造函数则会在所有的静态代码块执行完毕后执行。
相关问题
java静态代码块的执行顺序
Java中的静态代码块是在类加载的时候被执行的,它是一个只运行一次的代码段,通常用于初始化静态变量或做一些一次性的工作。静态代码块的执行顺序遵循特定规则:
1. **线程安全**:所有静态代码块会在类初次被加载到 JVM 的内存中时按字典序(基于全限定名)一次性全部执行。这意味着如果两个静态代码块的全限定名相同,它们会并行执行。
2. **静态初始化顺序**:静态代码块的执行不会依赖于其他静态初始化语句,即使是同包下的类。然而,非静态初始化块(构造函数、实例字段赋值等)则遵循单例模式中的“上帝类”模式(如果有),即谁最早创建该类的对象,谁先执行其静态代码块。
3. **静态初始化优于实例初始化**:如果类中有静态代码块和实例代码块,那么静态代码块总是优先于实例代码块执行。
4. **静态代码块执行前无须创建对象**:静态代码块不需要类的对象就已经存在就可以执行。
java里静态代码块、构造块、构造方法的相关区别,并举例验证
静态代码块,构造块和构造方法是Java中对象初始化的三种方式,它们各自具有不同的执行顺序和作用。它们的区别如下:
1. 静态代码块是在类被加载时执行的代码块,它只执行一次。静态代码块主要用于类的初始化,如静态变量的初始化等。
2. 构造块是在类中定义的代码块,每次创建对象时都会执行,不论是调用无参构造函数还是有参构造函数。构造块用于初始化对象,如为对象的成员变量分配内存等。
3. 构造方法也是用于对象的初始化,但是它可以接收参数。构造方法用于为对象的成员变量赋初值。
下面是一个例子,可以帮助理解它们之间的关系:
```java
public class BlockTest {
static {
System.out.println("静态代码块执行");
}
{
System.out.println("构造块执行");
}
public BlockTest() {
System.out.println("无参构造器执行");
}
public BlockTest(int a) {
System.out.println("有参构造器执行");
}
public static void main(String[] args) {
BlockTest bt1 = new BlockTest();
BlockTest bt2 = new BlockTest(10);
}
}
```
运行以上代码,输出结果如下:
```
静态代码块执行
构造块执行
无参构造器执行
构造块执行
有参构造器执行
```
可以看出,静态代码块是在类被加载时执行的,构造块是每次创建对象时都会执行的,而构造方法是用于为对象的成员变量赋初值的。
需要注意的是,虽然静态代码块和构造块都用于对象的初始化,但是它们的执行顺序是有区别的。静态代码块只会在类初始化时执行一次,而构造块则会在对象创建时执行。因此,静态代码块先于构造块执行。
阅读全文