- 代码块的作用
- 初始化对象和类
- 代码块如果有修饰的话只能用static
- 静态代码块:static修饰
- 非静态代码块
- 静态代码块
- 内部可以有输出语句。
- 随着类加载而执行,且只执行一次。
- 一个类中定义多个静态代码块,按照声明先后顺序执行。
- 静态代码块优先与非静态代码块执行。
- 只能调用静态属性、静态方法。
- 作用:初始化类的信息,就是说对静态的属性重新赋值。
- 非静态代码块
- 内部可以有输出语句。
- 随着对象的创建而调用,每创建一个对象就会执行一次。
- 一个类中定义多个非静态代码块,按照声明先后顺序执行。
- 能调用静态属性、静态方法。也可以调用非静态属性、非静态方法。
- 作用:创建对象时,对对象属性等初始化。
public class test {
public static void main(String[] args) {
String speak = Person.speak;
System.out.println("-------------分割线---------------");
Person p1 = new Person();
}
}
class Person {
// 静态属性
static String speak = "speak";
// 静态方法
public static void walk() {
System.out.println("静态方法被调用:" + speak);
}
// 静态代码块
static {
System.out.println("静态代码块调用静态属性:" + speak); // 静态代码块调用静态属性
walk(); // 静态代码块调用静态方法
}
// 非静态属性
String eat = "eat";
// 非静态方法
public void run() {
System.out.println("非静态方法被调用:" + eat);
}
// 非静态代码块
{
System.out.println("非静态代码块调用静态属性:" + speak);
System.out.println("非静态代码块调用非静态属性:" + eat);
walk();
run();
}
}
结果:
静态代码块调用静态属性:speak
静态方法被调用:speak
-------------分割线---------------
非静态代码块调用静态属性:speak
非静态代码块调用非静态属性:eat
静态方法被调用:speak
非静态方法被调用:eat