Java 面向对象:static的理解以及各个代码块的运行顺序
一、static关键字
- static修饰方法——称为静态方法,可以直接通过类名调用
- static修饰变量——称为静态变量,能被类中所有实例共享
二、代码块的运行顺序
单个类的加载顺序:
1. 静态代码块(只执行一次)
格式:static {
java语句
java语句
}
- 静态代码块在类加载时执行,并且只执行一次
- 一个类可以有多个静态代码块
- 静态代码块1和静态代码块2是有先后顺序的,一般是按照自上而下的顺序执行,
- 静态变量和静态代码块是有先后顺序的
- 静态代码块的作用:静态代码块不常用,主要用来记录类加载的日志信息(记录时间,哪个类加载到JVM当中)
2. 匿名代码块(用于赋初始值)
格式:
{
java语句
java语句
}
3. 构造器
格式:
public 类名(){
}
4. 普通代码块
格式:
public void 方法名(){
方法体}
示例:
test类
package Day0204.Demo04;
//依次执行静态代码块(只执行一次)、匿名代码块(用于赋初始值)、再到构造器
public class Test {
static {//1:只执行一次次
System.out.println("父类静态代码块");
//静态代码块
}
{//2:赋予初始值
//匿名代码块
System.out.println("父类匿名代码块");
}
public Test() {//3
System.out.println("父类构造方法");
}
public void method(){
{
System.out.println("父类普通初始化块");
}
}
public static void main(String[] args) {
Test test = new Test();
test.methid();
}
}
运行结果:
子类代码块的运行顺序:
- 父类静态代码块
- 子类静态代码块
- 父类匿名代码块
- 父类构造方法
- 子类匿名代码块
- 子类构造器
- 子类普通初始化块
test2类
package Day0204.Demo04;
public class Test2 extends Test{
static {//1:只执行一次次
System.out.println("子类静态代码块");
//静态代码块
}
{//2:赋予初始值
//匿名代码块
System.out.println("子类匿名代码块");
}
public Test2() {
System.out.println("子类构造器");
}
public void method(){
{
System.out.println("子类普通初始化块");
}
}
public static void main(String[] args) {
Test2 test2 = new Test2();
test2.method();
}
}
运行结果: