代码块是对构造器的补充
会解决构造器的代码冗余问题
而且代码块的调用时优先于构造器的
代码块的使用细节 配合static的静态代码块静态代码块作用是对类进行初始化,随着类的加载而执行
类被加载的时候-
创建类的对象时;对类进行实例化的时候
-
创建子类对象的时候类也会被加载 父类先被加载 子类后被加载
-
使用静态成员时(静态属性,静态方法) 很好的体现了另一种叫法类变量类方法
补充 子类调用类成员时,一定会调用父类
只执行一次 因为类只加载一次
普通代码块在创建对象实例时会被调用,使用静态成员时不会被执行
| 代码块的调用 | 创建对象时 | 使用静态成员时 |
|---|---|---|
| 普通 | 会调用,创建一次就调用一次 | 代码块不执行 |
| static | 会调用 ,有且只有一次(因为创建对象时类被加载) | 代码块执行一次 |
总结 普通代码块随对象而生
静态代码块随类加载而生
代码块的顺序问题public class CodeBlockDetail02 {
public static void main(String[] args) {
A a = new A();
}
}
class A{
private int n2 = getN2();
static {
System.out.println("n1代码块被执行");
}
private static int n1 = getN1();
{
System.out.println("n2静态代码块被执行");
}
public static int getN1(){
System.out.println("getN1被调用");
return 100;
}
public int getN2(){
System.out.println("getN2被调用");
return 100;
}
}
静态变量的初始化 和 静态代码块 的实现时同级别的 取决于申明的先后
静态优先于普通(是因为类的加载优先于属性的生成)
创建一个子类对象,静态代码块,静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序
- 父类的静态代码块和静态属性
- 子类的静态代码块和静态属性
- 父类的普通代码块和普通属性
- 父类的构造方法
- 子类的普通代码块和普通属性
- 子类的构造方法
原则父类>子类,静态>普通
这是接触Java以来第一次认真做笔记,所以当是我的第一篇博客发出来与诸君共勉!



