代码块是一个不重要的概念,但是作为结构清楚一下就可以了。所以的代码块指的是使用了“{}”定义的一段程序代码,代码块根据其定义的位置以及声明的关键字的不同一共可以分为四类:普通代码块、构造块、静态块、同步代码块。
普通代码块
普通代码块指的是定义在方法中的代码块。
范例: 观察一个简单程序
public class TestDemo {
public static void main(String[] args) {
if(true) { //表示该判断一定成立
int x = 10; //局部
System.out.println("x = " + x);
}
int x = 100; //全局
System.out.println("x = " + x);
}
}
如果说现在将if
语句拿掉,就成为普通代码块了。
public class TestDemo {
public static void main(String[] args) {
{ //直接使用大括号进行了定义,普通代码块
int x = 10; //局部
System.out.println("x = " + x);
}
int x = 100; //全局
System.out.println("x = " + x);
}
}
如果现在的方法中代码写的过长,但是又需要避免变量重名问题,往往会使用普通代码块,其实也没人用。
构造块
构造块指的是定义在类中的代码块。
范例: 定义构造块
class Person {
{
System.out.println("1、Person类的构造块");
}
public Person() {
System.out.println("2、Person类的构造方法");
}
}
public class TestDemo {
public static void main(String[] args) {
new Person();
new Person();
}
}
每一次使用关键字new
实例化对象的时候一定会调用构造方法。但是有了构造块之后发现构造块会优先于构造方法执行。
这个构造块唯一的好处是可以进行一些简单的逻辑操作,但是也没什么用。
构造块的使用只是一种补充手段,这种手段有恰恰没有意义。
静态块
静态块指的是使用static
关键字定义的代码块。但是如果要想考虑静态块必须分为两种情况
- 在非主类中定义的静态块;
- 在主类中定义的静态块。
范例: 观察静态块定义
class Person {
{
System.out.println("1、Person类的构造块");
}
public Person() {
System.out.println("2、Person类的构造方法");
}
static {
System.out.println("3、Person类的静态块");
}
}
public class TestDemo {
public static void main(String[] args) {
new Person();
new Person();
}
}
可以发现静态块优先于构造块执行,而且不管产生多少个实例化对象,静态块也只使用一次。静态块最为主要的作用就是为static
属性初始化。
class Person {
private static String info = "hello";
{
System.out.println("1、Person类的构造块");
}
public Person() {
System.out.println("2、Person类的构造方法");
}
static { //静态块
info += "world!"; //对static进行初始化配置
System.out.println("3、Person类的静态块" + info);
}
}
public class TestDemo {
public static void main(String[] args) {
new Person();
new Person();
}
}
静态块也可以定义在主类里面,那么此时的静态块将优先于主方法执行。
public class TestDemo {
static {
System.out.println("****************");
}
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
一般而言也没有什么意义了。
总结
如果需要在一些属性使用前做处理就使用构造块或静态块完成。同步代码块与多线程有关。