当我们创建Java对象时,会自动对对象进行初始化。除了对属性进行初始化外,我们还可以利用代码块来进行初始化操作。其中Java构造代码块和静态代码块都是常见的初始化方式。
构造代码块
构造代码块是一种在类中直接使用非静态代码块的方式来对实例进行初始化的机制。它只跟随构造函数一起执行,例如:
public class CodeBlockExample {
{
System.out.println("构造代码块执行");
}
public CodeBlockExample() {
System.out.println("构造函数执行");
}
public static void main(String[] args) {
new CodeBlockExample();
new CodeBlockExample();
}
}
输出结果如下:
构造代码块执行
构造函数执行
构造代码块执行
构造函数执行
由于构造代码块只跟随构造函数执行一次,因此上述代码会执行两次构造代码块,但只执行一次构造函数。
静态代码块
静态代码块是在类被加装时最先执行的代码块,不依赖于任何方法或者实例的调用。用法如下:
public class CodeBlockExample {
static {
System.out.println("静态代码块执行");
}
public static void main(String[] args) {
new CodeBlockExample();
new CodeBlockExample();
}
}
输出结果如下:
静态代码块执行
静态代码块执行
静态代码块只执行一次,而且在类被加载时直接执行,因此输出结果中也只有一次静态代码块执行。
静态代码块用法示例
- 静态代码块加载资源文件
静态代码块可以用来加载资源文件,例如:
public class ResourceLoader {
private static Properties properties;
static {
properties = new Properties();
try {
properties.load(ResourceLoader.class.getClassLoader().getResourceAsStream("config.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String value = properties.getProperty("key");
System.out.println(value);
}
}
上述代码通过静态代码块加载了类路径下的config.properties
文件,并将其内容存储在静态变量properties
中,以供后续程序调用。
- 静态代码块初始化单例对象
静态代码块可以用于初始化单例对象,例如:
public class Singleton {
private static Singleton INSTANCE = null;
static {
INSTANCE = new Singleton();
}
private Singleton() {};
public static Singleton getInstance() {
return INSTANCE;
}
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
System.out.println(singleton);
}
}
上述代码通过静态代码块初始化了单例对象INSTANCE
,确保在任何情况下都只存在一个实例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java构造代码块,静态代码块原理与用法实例分析 - Python技术站