Java中的static块和构造函数都是用来初始化类的成员变量的,但两者有着不同的特点和应用场景。下面详细讲解static块和构造函数的用法及其区别。
在Java中,static块是一个静态代码块,用来初始化静态成员变量。在类加载时,如果类中有static块,则首先会执行static块,然后才会执行其他代码块和构造函数。
格式如下:
static{
// 初始化代码
}
下面例子中, static块用于初始化静态成员变量count:
public class StaticBlockDemo {
static int count;
static {
count = 0;
System.out.println("执行了静态块");
}
public StaticBlockDemo() {
count++;
System.out.println("执行了构造函数");
}
public static void main(String[] args) {
System.out.println("count=" + StaticBlockDemo.count);
StaticBlockDemo s1 = new StaticBlockDemo();
System.out.println("count=" + StaticBlockDemo.count);
StaticBlockDemo s2 = new StaticBlockDemo();
System.out.println("count=" + StaticBlockDemo.count);
}
}
输出结果为:
执行了静态块
count=0
执行了构造函数
count=1
执行了构造函数
count=2
在类被加载时,先执行静态块中的初始化代码,然后执行main函数中的代码,最后执行构造函数。初始化代码中将count初始化为0,在构造函数中每次都会将count加1。因此,在执行构造函数时,count值分别为1和2。
构造函数是一种特殊的方法,用来初始化类的对象。在创建类的对象时,会自动地调用构造函数,并传入相应的参数。
格式如下:
public class ClassName{
public ClassName(){
// 初始化代码
}
}
下面例子中,构造函数用于初始化对象的属性:
public class ConstructorDemo {
String name;
int age;
public ConstructorDemo(String name, int age) {
this.name = name;
this.age = age;
}
public void show() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
public static void main(String[] args) {
ConstructorDemo c = new ConstructorDemo("张三", 20);
c.show();
}
}
输出结果为:
姓名:张三,年龄:20
在创建ConstructorDemo对象时,会调用构造函数进行初始化。构造函数将传入的name和age赋值给对象的属性name和age,然后调用show方法输出属性值。
static块和构造函数都可以用来初始化类的成员变量,但它们有以下区别:
因此,在使用时需要根据需要进行选择。