在进行java学习中,学习到了构造方法这一节,当时觉得构造方法,初始化块,和静态初始化块比较困惑,自我感觉这三种方法都是对类进行初始化的,在这里将这三个区别和联系在这里讲讲。
构造方法 构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。
初始化块 初始化块是也是给类进行初始化作用的,初始化块的符号为{},前面只可以用static修饰,加上static后就成为了静态初始化块,只能对静态成员变量进行初始化。
当构造方法是无参构造的话构造方法和一般(非静态)初始化块一样,在new 一个对象时,会先执行一般初始化块的内容,然后在执行构造方法的内容,每new一个对象都会执行一次,静态初始化块是随着类的加载而执行,不管该类new了几个对象,静态初始化块都只执行一次
总的来说,在执行顺序方面 静态初始化块>一般初始化块>构造方法,初始化块相当于构造方法的无参构造,适用于给所有对象统一赋初值,而构造方法(带参)可以给不同的对象赋不同的值,静态初始化块只在类加载使执行一次,只能给静态变量赋初值,当不同的对象需要使用一个统一值的时候可以采用静态变量和静态初始化块;
例子:
public class HelloWorld {
String name; // 声明变量name
String sex; // 声明变量sex
static int age;// 声明静态变量age
// 构造方法
public HelloWorld() {
System.out.println("通过构造方法初始化name");
name = "tom2";
age = 2;
}
// 初始化块
{
System.out.println("通过初始化块初始化sex");
sex = "男";
name = "tom1";
age = 3;
}
// 静态初始化块
static {
System.out.println("通过静态初始化块初始化age");
age = 20;
}
public void show() {
System.out.println("姓名:" + name + ",性别:" + sex + ",年龄:" + age);
}
public static void main(String[] args) {
// 创建对象
HelloWorld hello = new HelloWorld();
HelloWorld hello1 = new HelloWorld();
// 调用对象的show方法
hello.show();
//改变hello中成员变量的值来测试hello1中成员变量的值是否改变
hello.age = 21;
hello.name = "tom3";
hello1.show();
}
}
运行结果:
通过静态初始化块初始化age
通过初始化块初始化sex
通过构造方法初始化name
通过初始化块初始化sex
通过构造方法初始化name
姓名:tom2,性别:男,年龄:2
姓名:tom2,性别:男,年龄:21
在运行结果中可以得到这三个方法的执行顺序执行次数,new了两个对象,其中静态初始化码块只执行了一次,而非静态初始化块和构造函数都执行了两次。