通过实例解析Java类初始化和实例初始化的攻略
在Java中,类初始化和实例初始化是非常重要的概念。本篇攻略将通过具体的示例来讲解它们的作用和区别。
什么是类初始化
类初始化是当一个类被加载到内存中时所进行的一系列操作,主要包括两个方面:类本身的初始化操作和对类中静态成员变量的初始化。
类本身的初始化操作通常指对类的静态成员变量的赋值操作,以及静态代码块的执行操作。当我们第一次使用某个类时,JVM会先将这个类加载到内存中,然后对类中的静态成员变量进行初始化,最后执行静态代码块。
下面的代码示例可以很好地展示类初始化是如何进行的:
public class ClassInitDemo {
// 声明静态成员变量
public static String staticField = "Static Field";
// 声明静态代码块
static {
System.out.println("Static Block");
}
// 声明普通成员变量
public String field = "Field";
// 声明普通代码块
{
System.out.println("Normal Block");
}
// 声明构造函数
public ClassInitDemo() {
System.out.println("Constructor");
}
}
当我们第一次使用这个类时,JVM会进行类初始化操作,控制台会输出以下内容:
Static Block
什么是实例初始化
实例初始化是对类的实例进行初始化的操作,主要包括两个方面:对实例变量进行初始化和对实例代码块进行执行。
对实例变量进行初始化时,会按照声明的顺序进行初始化,同样地,先是静态变量,再是普通变量。
对实例代码块进行执行时,同样也是按照声明的顺序依次执行。
下面的代码示例可以很好地展示实例初始化是如何进行的:
public class InstanceInitDemo {
// 声明静态变量
public static String staticField = "Static Field";
// 声明实例变量
public String field = "Field";
// 声明实例代码块
{
System.out.println("Instance Init Block");
}
// 声明构造函数
public InstanceInitDemo() {
System.out.println("Constructor");
}
}
当我们创建一个该类的实例时,JVM会进行实例初始化操作,控制台会输出以下内容:
Instance Init Block
Constructor
示例说明
示例1:
public class Demo {
public static void main(String[] args) {
System.out.println("Start Main");
ClassInitDemo c1 = new ClassInitDemo();
ClassInitDemo c2 = new ClassInitDemo();
System.out.println("End Main");
}
}
输出:
Start Main
Static Block
Normal Block
Constructor
Normal Block
Constructor
End Main
从上面的输出结果可以看出,当Java虚拟机加载ClassInitDemo
类时,会进行类初始化操作,输出了Static Block
。当我们创建ClassInitDemo
类的两个实例时,会进行实例初始化操作,输出了两次Normal Block
和两次Constructor
。
示例2:
public class Demo {
public static void main(String[] args) {
System.out.println("Start Main");
InstanceInitDemo i1 = new InstanceInitDemo();
InstanceInitDemo i2 = new InstanceInitDemo();
System.out.println("End Main");
}
}
输出:
Start Main
Instance Init Block
Constructor
Instance Init Block
Constructor
End Main
从上面的输出结果可以看出,当我们创建InstanceInitDemo
类的两个实例时,会进行两次实例初始化操作,每次都输出了Instance Init Block
和Constructor
。
结论
通过上面的示例可以看出,类初始化和实例初始化是两个不同的概念。类初始化是当一个类被加载到内存中时所进行的一系列操作,主要包括对类的静态成员变量的初始化和静态代码块的执行操作;实例初始化是对类的实例进行初始化的操作,主要包括对实例变量的初始化和实例代码块的执行操作。
需要注意的是,在对类进行实例化时,类的静态成员变量初始化在类初始化时已完成,因此不会被重复初始化。而每次对类进行实例化操作时,都会进行实例初始化操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过实例解析Java类初始化和实例初始化 - Python技术站