00011.3关键字static和代码块以及初始化的关系

tech2025-05-07  4

一、关键字static和初始化的关系

我们思考一个问题,为什么会先走static呢? 其实明白一个道理就很容易理解了,我们在继承一个父类的时候,实际上是先把父类先加载过来,你想想,你要继承它是不是这个类得先在内存当中有?不然的话你基础个啥,没得继承啊 **由上面的执行结果我们能得到几个结论: 1、一个类初始化时会先检查它的父类是否初始化,如果父类没有初始化,那么会先初始化父类 2、非静态代码块和静态代码块同时存在一个类中,这个类被初始化的时候,先执行静态代码块(并且精通代码块只执行一次) ** 如果父类已经被初始化了,那么就不会再次初始化了,如下图所以:如果没有刚开始就初始化父类,只初始化子类的话,会先去加载父类,从而引发父类的两个代码块(先静态再非静态)

完整代码如下:

package com.atguigu.test03_static; public class TestClassInit { public static void main(String[] args) { Father f=new Father(); System.out.println("----再实例化一次父类"); Father f2=new Father(); System.out.println("----下面实例化子类---------------------------"); Son s=new Son(); } } class Father{ { System.out.println("父类的代码块(2)"); } static{ System.out.println("父类的静态代码块代码块(3)"); } } class Son extends Father { static{ System.out.println("子类的静态代码块(1)"); } } //由上面的执行结果我们能得到一个结论: //一个类初始化时会先检查它的父类是否初始化,如果父类没有初始化,那么会先初始化父类

二、静态方法是不能被重写的

为什么静态方法不能被重写呢?因为静态方法在编译期间就确定了,不需要在运行时动态绑定

最新回复(0)