1 代码块概念以及分类
使用 {} 定义的一段代码称为代码块。根据代码块定义的位置以及关键字,又可分为以下四种:
- 普通代码块
- 构造块
- 静态块
- 同步代码块(后续讲解多线程部分再谈)
2 普通代码块
普通代码块:定义在方法中的代码块
public class Main{
public static void main(String[] args) {
{ //直接使用{}定义,普通方法块
int x = 10 ;
System.out.println("x1 = " +x);
}
int x = 100 ;
System.out.println("x2 = " +x);
}
}
// 执行结果
x1 = 10
x2 = 100
3 构造代码块
构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量
public class student {
String name;
private int age;
private String stuNum;
{
this.age=10;
this.stuNum="201401";
this.name="wangwu";
}
}
4 静态代码块
使用static定义的代码块称为静态代码块。一般定义在类中间,方法的外面,一般用于初始化静态成员变量,不可以初始化非静态成员变量。
static {
className="303班";
}
静态代码块:
- 在类加载的时候 被执行
- 如果出现多个静态代码块。 都是静态的情况下,和定义顺序有关系。
注意事项
- 静态代码块不管生成多少个对象,其只会执行一次
- 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
- 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
- 实例代码块只有在创建对象时才会执行
5.综合分析
public class student {
String name;
private int age;
private String stuNum;
{
this.age=10;
this.stuNum="201401";
this.name="wangwu";
System.out.println("这是实例代码块");
}
public static String className="304班";
static {
className="303班";
System.out.println("这是静态代码块");
}
public student(String name, int age, String stuNum) {
this.name = name;
this.age = age;
this.stuNum = stuNum;
System.out.println("这是构造方法");
}
}
public static void main(String[] args) {
student student1=new student("zhangsan",10,"201401");
}
注意事项
- 当多种代码块并存的时候,按照静态->实例->构造的顺序
- 当同一种代码块有多个时,按照顺序执行
- 多个对象只会执行一次静态代码块,即这个类只会加载一次
【了解】 这里有一个知识点:双亲委派模型