static:
是一个关键字,用于修饰成员变量和成员方法
特点:
- 被所有对象共有
- 不需要实例对象就可以使用类名直接调用
- 静态的成员和变量同类的加载一起,优先与对象的创建
注意:
- 静态的方法只能调用静态的成员变量和成员方法,不能调用非静态成员变量和成员方法
- 非静态方法既能调用静态成员变量和静态成员方法,又能调用非静态成员变量和非静态成员方法
代码块:
java中,使用{}括起来的代码被称为代码块
分类:
- 局部代码块:程序中使用{}括起来的部分
- 构造代码块:与构造函数出现再同一位置的{},用于抽取构造函数的共性,调用构造函数时被执行,而且比构造函数先执行
- 静态代码块:用static修饰{}
- 同步代码块:
代码块调用顺序实例:
public class BlockTest {
//BlockTest的静态代码块
static {
System.out.println("BlockTest 静态 代码块");
}
//BlockTest的构造代码块
{
System.out.println("BlockTest 代码块");
}
//BlockTest的无参构造函数
BlockTest() {
System.out.println("BlockTest 无参构造函数");
}
public static void main(String[] args) {
System.out.println("mian 被执行");
//实例化两个对象
Coder c1 = new Coder();
Coder c2 = new Coder();
}
}
class Coder {
//静态代码块
static {
System.out.println("Coder 静态 代码块");
}
//构造代码块
{
System.out.println("Coder 代码块");
}
//构造函数
Coder() {
System.out.println("Coder 无参构造函数");
}
}
执行结果:
分析:
- 点击运行,先加载BlockTest类,所以BlockTest的静态构造代码块被执行,输出
BlockTest 静态 代码块
- 类被加载后执行main方法,因为没有创建BlockTest的对象所以BlockTest中的构造代码块和构造方法不会执行,进入main函数输出
mian 被执行
- 创建c1时首先加载Coder对象,Coder静态代码块被执行输出
Coder 静态 代码
然后执行Coder类的构造代码块输出
Coder 代码块
再执行Coder的无参构造函数输出
Coder 无参构造函数
- 再创建c2对象,因为Coder对象已经被加载,所以静态代码 块中的代码不再被执行直接输出
Coder 代码块
最后输出
Coder 无参构造函数