程序中使用{}括起来的代码被称之为代码块,根据其位置和声明的不同,可以分为以下几类代码块:
局部代码块
在方法中出现;限定变量生命周期,及早释放,提高内存利用率
{ // 方法中
int a = 10;
System.out.println("局部代码块:" + a);
} // 执行到本行时代码块中内部变量已被释放
System.out.println(a); // 局部代码块外面不能再访问内部变量
构造代码块
也叫初始化块,它在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行。示例如下:
public class Demo {
public static void main(String[] args) {
Student stu = new Student("zhangsan", 23); // new几次 构造代码块就打印几次
}
}
class Student{
String name;
int age;
//构造代码块 (初始化块)
{
System.out.println("构造代码块"); // 构造代码块先于构造方法打印
System.out.println("AAAAAAA"); //有参和无参构造方法中的两个相同代码存放到一起,每次调用构 造都执行,并且在构造方法前执行。
}
// 无参构造方法
public Student(){
//System.out.println("AAAAAAA");
}
// 有参构造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
System.out.println("有参的构造方法");
//System.out.println("AAAAAAA");
}
}
代码打印顺序如下:
构造代码块
AAAAAAA
有参的构造方法
静态代码块
在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次;一般用于加载驱动。
public class Demo {
public static void main(String[] args) {
// new 两个对象 调用类中方法。
Student stu1 = new Student("zhangsan", 28);
Student stu2 = new Student("lisi", 27);
}
}
class Student{
String name;
int age;
//静态代码块
static{
System.out.println("静态代码块"); //只执行一次,可从打印结果中看出。
}
public Student(String name, int age) {
this.name = name;
this.age = age;
System.out.println("有参的构造方法");
}
}
代码打印顺序如下:
静态代码块
有参的构造方法
有参的构造方法
同步代码块
代码块前加上 synchronized关键字,则此代码块就成为同步代码块。同步对象一般为当前对象,即使用this关键字。
同步代码块的格式:
synchronized(同步对象){
需要同步的代码;
}