称使用{}括起来的代码被称为代码块;而根据其位置和声明的不同,可以分为:
局部代码块、构造代码块、静态代码块和同步代码块。
1、局部代码块
在方法中出现;限定变量生命周期,及早释放,提高内存利用率;
不然,直到程序运行结束,该变量依然占着内存,而之后又没有使用过,是一种内存浪费
public class Tset01 {
public static void main(String[] args) {
{
int a = 2;
System.out.println(a);
}
/* 不能调用a,因为a是局部代码块中的变量
* 当局部代码块执行完,其内部的变量就回收,被释放 */
// System.out.println(a);//报错
}
}
2、构造代码块 (初始化块)
- 在类中方法外出现;
- 多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
public class Student {
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
System.out.println("无参构造方法");
}
public Student(String name, int age) {
this.name = name;
this.age = age;
System.out.println("有参构造方法");
}
/* 每次调用构造方法前都执行,不管有参还是无参,且在构造方法前执行
* 这里就是每次创建Student对象都执行一次 */
{
System.out.println("构造代码块(初始化块)");
}
}
=================================================
public class Tset01 {
public static void main(String[] args) {
Student s1 = new Student("张三", 20);
Student s2 = new Student();
Student s3 = new Student("李四", 20);
}
}
=================================================
输出结果:
构造代码块(初始化块)
有参构造方法
构造代码块(初始化块)
无参构造方法
构造代码块(初始化块)
有参构造方法
3、静态代码块 【常用】
- 在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次
- 一般用于加载驱动
public class Student {
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
System.out.println("无参构造方法");
}
public Student(String name, int age) {
this.name = name;
this.age = age;
System.out.println("有参构造方法");
}
/* 在加载类的时候就执行,并且只执行一次
* 这里就是Student.class进内存方法区时执行一次,之后创建实例Student时不在执行 */
static {
System.out.println("静态代码块");
}
}
=================================================
public class Tset01 {
public static void main(String[] args) {
Student s1 = new Student("张三", 20);
Student s2 = new Student();
Student s3 = new Student("李四", 20);
}
}
=================================================
输出结果:
静态代码块
有参构造方法
无参构造方法
有参构造方法
练习:
public class Person {
static {
System.out.println("Person 静态代码块");
}
{
System.out.println("Person 构造代码块");
}
public Person() {
System.out.println("Person 构造方法");
}
}
=================================================
public class Tset01 {
static {
System.out.println("Tset01 静态代码块");
}
public static void main(String[] args) {
System.out.println("我是main方法");
Person p1 = new Person();
Person p2 = new Person();
}
}
输出:
Tset01 静态代码块
我是main方法
Person 静态代码块
Person 构造代码块
Person 构造方法
Person 构造代码块
Person 构造方法