java关键字系列--- static

原创
2018/12/27 10:41
阅读数 24

先上代码:

1、先创建FatherClassA 
public class FatherClassA {

    static {
        System.out.println("这个是FatherClassA 的 static代码块");
    }

    public FatherClassA(){
        System.out.println("这个是FatherClassA 的 无惨构造函数");
    }

}
2、创建SubClassA继承于FatherClassA
public class SubClassA extends FatherClassA {

    static {
        System.out.println("这个是SubClassA 的 static代码块");
    }

    public SubClassA() {
        System.out.println("这个是SubClassA 的无参构造函数");
    }

    public static void main(String[] args) {
        new SubClassA();
    }

}
3、此时在SubClassA中的main方法执行 new SubClassA();输出结果为:

这个是FatherClassA 的 static代码块
这个是SubClassA 的 static代码块
这个是FatherClassA 的 无惨构造函数
这个是SubClassA 的无参构造函数

原理分析:

1、java中static关键字可以作用于类变量、方法或者静态代码块。

2、被static修饰的代码,会在类初始化(涉及jvm的类加载机制,随后补文档)的时候被执行。

3、java中在实例化子类对象时,会默认调用父类的无参构造方法。(此处如果父类有有参数的,并且在子类中使用super调用了有参的构造方法,则就不会走无参构造方法了)。

4、这段示例代码再jvm中大体的执行过程是:jvm加载SubClassA类时,发行SubClassA集成于FatherClassA类,则先去加载FatherClassA类,当把FatherClassA加载到jvm中,发行有static代码块,则在类初始化时先执行了FatherClassA的static代码,完成之后jvm把SubClassA加载到jvm中,也是发行有static代码块,先执行static代码块,之后再执行创建SubClassA实例对象(new SubClassA),在实例化SubClassA的时候,会先调用父类的构造方法,也就是在这个过程中,是同时创建了FatherClassA和SubClassA对象的实例了。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部