在程序编写中可以直接使用“{ }”定义一段代码,根据此部分代码定义的位置不同以及声明关键字的不同可将这些代码块分为四种:普通代码块、构造块、静态块、同步代码块(等待多线程时)。代码块本身有许多破坏程序结构的操作,所以在实际编写代码时不建议使用。
1.普通代码块
如果一个代码块写在方法里,就称它为普通代码块。一般而言普通代码块可以实现较大程序的分隔,可以有效的避免重名变量问题。
程序: 编写普通代码块
public class TestDemo{
public static void main(String args[]){
{ //普通代码块
int num=10; //局部变量
System.out.println("num="+num);
}
int num=100; //全局变量
System.out.println("num="+num);
}
}
程序执行结果: num=10;
num=100;
2.构造块
如果将一个代码块写在一个类里,这个代码块就称为构造块。构造块在每次实例化对象时都会被调用,而且早于构造方法执行。
程序: 定义构造块
class Book{
public Book(){
System.out.println("[A]Book类的构造方法!");
}
{
System.out.println("[B]Book类的构造块!");
}
}
public class TestDemo{
public static void main(String args[]){
new Book(); //实例化匿名对象
new Book();
}
}
程序执行结果:[B]Book类的构造块!
[A]Book类的构造方法!
[B]Book类的构造块!
[A]Book类的构造方法!
3.静态块
如果一个代码块使用static进行定义,就称其为静态块。静态块会优先调用(构造块、主方法),而且只调用一次,他的主要作用一般可以为static属性初始化。
程序一: 在非主类中,利用静态块为static属性初始化
class Book{
static String msg;
public Book(){
System.out.println("[A]Book类的构造方法!");
}
{ //构造块
System.out.println("[B]Book类中的构造块!");
}
static{ //静态块
msg="HelloWorld".substring(5,5);
System.out.println("[C]Book类中的静态块!");
}
}
public class TestDemo{
public static void main(String args[]){
new Book();
new Book();
System.out.println(Book.msg);
}
}
程序执行结果: [C]Book类中的静态块!
[B]Book类中的构造块!
[A]Book类的构造方法!
[B]Book类中的构造块!
[A]Book类的构造方法!
World
程序二: 在主类中定义
public class TestDemo{
public static void main(String args[]){
System.out.println("Hello World");
}
static{ //静态块
System.out.println("欢迎来到CSDN!");
}
}
程序执行结果: 欢迎来到CSDN!
Hello World
注意:从这个程序可以发现静态块优先于主方法执行,在JDK 1.7之前可以使用静态块来代替主方法。