Java的代码块
1 minute read
共有四种java代码块,分别为
1. 普通代码块
在方法或预计中出现的{}就是普通代码块,执行顺序和一般的语句由他们在代码中出现的先后顺序决定。
2. 静态代码块
使用static关键字声明的代码块,静态代码块用于初始化类,为类的属性初始化,只执行一次。由于静态代码块在实例化类的时候执行,所以它是先于主方法执行的。
3. 同步代码块
使用synchronized关键字修饰的代码块,在同一时间只能有一个线程进入到该代码块中,是一种多线程保护机制。
4. 构造代码块
在类中没有任何的前后缀,使用{}括起来的代码块。
构造代码块有如下特性:
- 执行默认会添加到构造方法的第一句,如下代码
相当于下面
所以,当有需要在每个构造方法里都执行一段代码时,可以写成一个方法来调用,但是采用构造代码块的方式是更合适的。
- 另外,在当有些构造方法通过this关键字来调用其他构造方法时,构造代码块只执行一次,下面是一个统计生成实例化对象个数的示例代码(其结果为输出3):
public class Test {
public static void main(String[] args) {
new Base();
new Base("");
new Base(0);
System.out.println("===实例化对象个数====>>>:" + Base.getNumOfObjects());
}
}
class Base {
// 实例化对象的个数
private static int numOfObjects = 0;
{
numOfObjects++;
}
public Base() {
}
public Base(String str) {
this();
}
public Base(int i) {
}
public static int getNumOfObjects() {
return numOfObjects;
}
}
其执行顺序为构造代码块在this();之后执行,这是因为this()和super()必须在方法的第一句。如果this为super时,那么构造代码块则有可能会多次执行,一定要注意!
I feedback.
Let me know what you think of this article on twitter @Yanlei_Hello or leave a comment below!
Let me know what you think of this article on twitter @Yanlei_Hello or leave a comment below!
comments powered by Disqus