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);
}
}
10
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进行定义,就称其为静态块。静态块有时分为两种情况:
例.情况一:在非主类中使用
class Book{
public Book(){
System.out.println("[A]Book类的构造方法");
}
{ //将代码块写在类中,所以称为构造块
System.out.println("[B]Book类的构造块");
}
static{
System.out.println("[C]Book类中的静态块");
}
}
public class TestDemo{
public static void main(String args[]){
new Book();
new Book();
}
}
[C]Book类中的静态块
[B]Book类的构造块
[A]Book类的构造方法
[B]Book类的构造块
[A]Book类的构造方法
本例中通过运行结果可以发现,当有多个实例化对象产生时,静态块会优先使用,而且只调用一次。静态块的主要作用一般可以为static属性初始化
例.利用静态块为static属性初始化
class Book{
static String msg;
public Book(){
System.out.println("[A]Book类的构造方法");
}
{
System.out.println("[B]Book类的构造块");
}
static{
msg = "HEllo".substring(0,2);
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类的构造方法
HE