当子类实例化时,首先检查父类有没有静态代码块,有便执行,没有便去子类中去检查,有便执行子类的静态代码块。
然后回到父类中看有没有普通代码块,有便执行,然后再执行构造方法,执行完毕后再去子类执行普通的代码块,再执行子类的构造方法。
因为静态代码块是优先分配内存,会先执行,就像Main()方法会有static修饰,作为程序的入口一样。
当用static修饰变量时,在其他类中可以用 类 . 变量 的方式调用,但是当使用private 在前面修饰这个变量时,比如private static int a = 1;这样就只能在本类中使用类 . 变量 的方式调用。
这是因为private修饰符是只能限于在本类中使用,protected可以在本包的其他子类或父类使用,public 可以在所有类使用。
//父类
public class B {
{
System.out.println("我是父类的普通的代码块");
}
static {
System.out.println("我是父类静态的代码块");
}
public B() {
System.out.println("我是父类的构造方法!");
}
}
//子类
public class A extends B {
{
System.out.println("我是子类的普通的代码块");
}
static {
System.out.println("我是子类静态的代码块");
}
public A() {
System.out.println("我是子类的构造方法!");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new A();
}
}
//输出结果
我是父类静态的代码块
我是子类静态的代码块
我是父类的普通的代码块
我是父类的构造方法!
我是子类的普通的代码块
我是子类的构造方法!
-- 仅供参考