java 子类,父类静态代码块

xiaoxiao2021-02-28  77

今天突然想起以前做的一个试题,有关子类和父类静态代码块中执行顺序的问题,在代码中子类父类的静态代码块是怎么执行的,有覆盖吗,是继承的还是怎么样的?对此做了一个小的测试:

一个People父类:

public abstract class People { private static final String TAG = "People"; static { Logger.e(TAG,"people 类 静态代码块"); } }

一个子类Man:

public class Man extends People { private static final String TAG = "Man"; static { Logger.e(TAG,"people 类 静态代码块"); } }

一个Woman类:

public class Woman extends People { private static final String TAG = "Woman"; static { Logger.e(TAG,"woman 类 静态代码块"); } }

一个Client类:

public class Client { private static final String TAG = "Client"; static { Logger.e(TAG,"Client 类 静态代码块"); } Man longlong = new Man(); Woman ruirui = new Woman(); @Test public void test1(){ longlong.describe(); Logger.e(TAG,"-------------------------\n"); } }上述几个类都加了一个静态代码块,Man继承了People 类,People中有一个普通方法describe();子类重写这个方法输出一句描述信息,Man类中重写了一下,这里同时可以看一下重写的执行状态。

在Client中创建对象执行test1方法结果:

Client 2017-05-05 04:32:48 Client 类 静态代码块 People 2017-05-05 04:32:48 people 类 静态代码块 Man 2017-05-05 04:32:48 people 类 静态代码块 Woman 2017-05-05 04:32:48 woman 类 静态代码块 Man 2017-05-05 04:32:48 Mna类中describ方法--前 People 2017-05-05 04:32:48 People describe类信息 Man 2017-05-05 04:32:48 Mna类中describ方法--后 Client 2017-05-05 04:32:48 -------------------------重结果可以看出:

先执行了Client类的静态代码块。

Man集成了Peolpe类,结果中People类,man类的静态代码块都做了输出,也就是没有覆盖,也没有继承。

执行顺序:先执行了父类People 的静态代码块,

People 2017-05-05 04:32:48 people 类 静态代码块然后执行了子类的静态代码块

Man 2017-05-05 04:32:48 people 类 静态代码块貌似是这样的结果,怎么多了一句 Woman 2017-05-05 04:32:48 woman 类 静态代码块发现原来是Client中创建了Woman的对象

Man longlong = new Man(); Woman ruirui = new Woman();注释掉这个,同时注释掉test1方法中的 longlong.describe();这句后结果是:

Client 2017-05-05 04:44:21 Client 类 静态代码块 People 2017-05-05 04:44:21 people 类 静态代码块 Man 2017-05-05 04:44:21 people 类 静态代码块 Client 2017-05-05 04:44:21 ------------------------- 没有输出Woman类的静态代码块。 添加一个系统时间

System.currentTimeMillis() 结果是:

Client 2017-05-05 04:51:48 Client 类 静态代码块:1493974308588 People 2017-05-05 04:51:48 people 类 静态代码块:1493974308620 Man 2017-05-05 04:51:48 people 类 静态代码块:1493974308621 Client 2017-05-05 04:51:48 -------------------------或者:

Client 2017-05-05 04:54:20 Client 类 静态代码块:1493974460466 People 2017-05-05 04:54:20 people 类 静态代码块:1493974460505 Man 2017-05-05 04:54:20 people 类 静态代码块:1493974460505 Client 2017-05-05 04:54:20 ------------------------- 看出来Client 类的静态代码块最先执行,接着是People父类的,最后是Man子类。单从执行时间看People类的和Man类的静态代码可能同时执行完。

结果:静态代码不会被子类覆盖,子类和父类都有静态代码的时候,静态代码都会单独执行。

转载请注明原文地址: https://www.6miu.com/read-32012.html

最新回复(0)