00:01
好。那这节课的话呢,我们来给大家讲一下咱们类中这个代码的一个执执行的一个顺序啊。类中代码的执行顺序。类中代码的一个执行顺序,因为这块的话呢,其实也是,呃,就是面试的时候,包括笔试的时候呢,经常会出一些题。我给你一段代码。然后这个代码里面可能包含了这个静态代码块啊,还有什么构造器啊,还有没方法等等,还有其他方法调用。给你一大堆的代码,然后问你这个代码的执行结果是个啥,对吧,像这种题的话呢,一般考察的就是我们,呃,这个类里边这些东西,它的一个执行的一个顺序,所以说我们统一呢,给它做一个梳理。那么首先我们要知道什么呢?这个类里边它先执行的一定是这个静态代码块啊,首先。先执行静态代码块。先执行这个静态代码块,我们通过程序来看。
01:07
比如说呢,我们这边写个test,好,我在这个T里边,我写一个static静态代码块,这里边的话呢,我们来输出一个static。扣的。Cute。对不对,是不是静态代码画的一个执行啊,对吧,我这边就不写中文了啊,这个简单的英文大家是应该是能看明白的,OK,然后的话我在问方法里边,我再来一个闷。Cute。是闷方法的一个执行啊,对不对,Sit out,好,那么我们先来看这两个,它的执行顺序应该是啥?这个东西最简单了,对吧?这个应该大家都能答得出来,是不是肯定是静态代码块先执行,然后再来执行,问方法,这个是没有任何疑问的。OK吧?咱们一个一个啊,一个一个来梳理,全部给你记下来。让你这块呢,没有任何的问题。这个是我们的执行结果,好放到这儿。
02:01
OK,这个是最基本的。如果这个你都答错啊,那就建议你不要去,呃做这个加开发啊,因为这个是太基础了,第二的话呢,什么呢?如果说我们给类中啊定义这个静态的成员变量,那么我们是怎么去走的。类中定义静态了。成员变量成员变量。成员变量对象,并且它是个对象。对不对,那么这边会怎么样,他会先创建对象来,我们还是通过代码来看啊。咱们还是通过代码来看,就是这边的话呢,哎,我这边呢,再给你来一个对象。呃,那首先我在这边呢,我们来写一个对象,写一个U的。啊,这user里边,User里边我就不写东西了,我就写一个。嗯。我就我就写一个空对象,然后呢,我给他写构造器,构造器里边我们来输出一句话。
03:01
我们叫user。In。我创建一个user OK,好,回到这边,回到这边的话,我们来定一个静态的static user。U等于谬一个U的好,对不对,这个时候大家来看这个代码应该怎么执行呢,来走。是不是,是不是首先是static,然后user in,然后呢,Men对不对,是不是先执行静态代码画,然后再执行这个,呃,静态的一个成员变量对象的一个创建,是不是再执行main方法。对不对,好,同时这边大家需要注意的什么呢?就是这两个东西啊。这个sta它肯定是sta肯定是优于优先于这个men去执行的,所以他俩肯定是先执行,然后再来执行它,那么他俩的顺序到底是怎么去决定呢?是一定先执行静态大号,还是说后执行这个。静态对象的一个创建呢,我们可以测试嘛,我给他换个位置你看。
04:02
我先把这个静态的成变量定义放到上面,然后把静态往二放到下面,我们再来看这个顺序啊,是怎么走的。对不对,大家可以看到这个时候是不是先创建对象了,再来执行静态代码块,所以呢,这两个代码的执行顺序是由它的位置来决定的。对不对,是由位置来决定的啊,然后我把我把这个问方法给它放到上面。对不对,放到上面再来走走。当然一般我们不可能我们不会这样去写的,对不对,你看到是不是依然是没有方法最后执行的,所以说你就算把它放在上面,它依然是在static执呃执行之后再来执行它,然后这个static这两个是由它的位置来决定,谁放前面我们就先谁执行谁,对吧,就这样一个操作啊。嗯,好。我们就用这个这个代码吧。这样的话看得更清楚一些啊。然后这是它的一个运行的结果截出来。
05:04
对吧,这边我们来强调一下啊,就是。首先。敬他。代码的执行一定。鲜鱼焖方法。对不对,然后呢,至于说静态的这个代码块和静态成员变量的执行呢,是由代码的位置来决定的,谁写前面就先执行谁静态代码。块和静态成员变量。的执行顺序。执行顺序是由。这个代码位置确定的。决定。对不对,谁写前面。就先执行谁。OK吧,非常的简单啊,好,这块没问题,接下来咱们来看第三种情况,就是如果说我们是一个非静态代码块和非静态的成员变量。
06:06
怎么办?就是我把这个study啊给他干掉对不对,来试一下。把这个顺序啊,还是给他闷方法放到最后吧。好,我们把这俩东西,我还是先把静态代码块放到上面。啊,按照这样一个顺序去走啊,我现在把这个东西啊给它干掉,它不是一个静态代码块,也不是一个静态成员变量,它就是一个代码块和一个成员变量,对不对,那大家想想这时候我们运行的话怎么走呢?就是告诉大家这两个不会执行的,来啊,我把它换掉,这边呢,就不要写这个excu啊,不要写这个static,就是code ex OK,再来走你。看看结果。这时候你会发现它只执行了一个闷方法,也就说这两个东西它就不再实行了啊,所以说这块大家都要搞清楚,很多同学到这就晕了,我把那个静态代码块去掉之后,把那个study去掉之后,他说这个东西仍然会执行的,那肯定就错了啊,掉坑里了对不对?好。
07:04
这边呃。代码,然后这边我们来说一下,如果说是非静态代码块和非静态成员变量,那么不执行。如果是非信用态成员代码块和成员变量。不执行啊。他就是不执行对不对,好,我们还是把这个图呢,也给大家截出来。有图有真相吗?这个大家下去之后呢,可以按照我这个代码去试啊,你看是不是我们的结果跟这边是一样的好。那么我们来说啊,这个代码块和这个纯面料。这俩这个代码什么时候执行呢。只有当我们在创建test的对象的时候,才会去执行这个静态非静态代码化和非静态的传变量。所以呢,只有。在创建。
08:01
Test对象的时候才会执行代码画。非静态代码号。和非静态。车外变量OK,来试一下吧。看一下是不是这个样子啊好,那么我们就在闷方法里面呢,我在焖方法里边,我就来创建自己吧,Test。等于牛尾吧,还是。来看一下啊。走。看到没有,是不是这时候这个code ex和user就创建了,就执行了,对不对啊。而且他俩的执行顺序呢,还是跟我们的顺序有关系的,比如说我把这个U放上面大家看。走。看到没有,是不是U的先创建后的后创建啊,后后执行的,所以说这个东西呢,还是由它的顺序来决定,同时如果说我们把这个论方法啊,把这个论方法的打印放到后面,就是顺序在哪呢。
09:07
这时候是什么顺序呢?你看是不是这样的,所以这里边儿的话呢,就就是完全是由它们的一个顺序来决定的啊,就是你把这个东西放哪。然后他就会在哪去执行对不对,因为这两个的话,它实际上是一个先后的一个执行顺序嘛,这个先执行后这个后执行,这个先执行的话呢,它在创建这个对象的时候,就会执行这个代码块以及我们的成员变量。对不对,同时的话呢,还有一个啥特点呢,就是你创建几个对象,我们这边就会及执行多少次。执行多少次这个,呃,代码块以及呢,创建多少个这个优的对象,比如说我这边来三个。等于六一个test,你看这个时候的话,大家可以看到啊走。你看是不是这个对象创建了三个,然后呢,代码块是不是执行了三次啊,所以呢,这个非静态的代码块和非静态成员变量。
10:05
它的执行完全取决于创建对象的时候,什么时候创建这个对象,而且你创建几个对象,这些东西呢,就会加载多少次。是这样一个道理啊,好。所以呢,这边我们来记录一下。创建多少个对象,就会执行多少次。代码画。创建。多少个成员变量对不对,因为这个成员变量和代码块都属于这个,呃对象的一部分,所以说你创建一个对象,我就需要拥有一份这个东西,你创建另外一个,我就需要拥有第二份,对不对,这样一个区别啊。
11:02
而且呢,这边我们再记一下就是这个啊,非静态代码化和非静态成用变量的执行顺序。是由代码。是不是也是由代码的位置来决定的?谁写前面谁先执行。对吧,好。没问题吧,那接下来我们继续去加大难度啊,如果说这个时候我同时存在。非静态代码块和静态代码块,以及非静态成员变量和静态成员变量。这个时候。是一个什么情况呢。如果。同时存在。非静态代码画。和静态代码号。以及非静态。
12:01
成员变量和静态成员变量。对不对,这时候怎么去执行呢?啊,我们先把这个,我先把结果告诉大家,一会我们来验证啊,他这时候会先执行。先执行非静态代码,先执行静态的东西,肯定是先执行静态东西,并且只执行一次。只这一次啊一次。在执行非静态的东西。创建多少个对象?而且这个啊呃,再执行的话,我们说它的前提呢,是创建对象的时候才去执行,如果你不创,不创建对象也不会执行的啊,创建对象。创建对象的时候执行,并且呢,创建多少个对象就会执行多少次。OK,好,这是我们的结论,那么我们来验证一下啊,这个大家应该都能猜出来了,对不对,好。那么我们再写一个static user。
13:01
U个等于。有的。OK,好,再来一个静态代码块static。这边static。扣。Put。介绍的。对吧,然后下面这个代码咱们就不改了,走你。看结果。对吧,大家可以看到这个U再in,这个U再in肯定是这个是我们静态成员变量,它导致我们会去执行的,对吧,然后呢,就先执行它,是不是再执行它看到没有先执行他俩,然后呢,是不是再去执行问方法,问方法完了之后呢,是不是这边创建了三个对象,这个时候是不是再去执行上面这三个非静态的一个代码。是不是创建对象,然后代码画创建对象,代码画创建对象代码画对不对。如果说这边你不去创建对象。是不是这三个他就不会去执行啊。
14:02
他只会去执行一个静态啊,所以呢,只要说使用到这个类了,静态的他一定会去执行,非静态的话呢,必须在创建对象的时候去执行。对吧,这个其实往深里说的话呢,其实就是静态的,是属于我们的类的,非静态属于对象的,所以呢,非静态既然属于对象,你必须拥有对象的时候,当你产生对象的时候,是不是才会去加载他们。你不创建对象,没有对象它就不去执行,但是这两个不一样,只要说你用到这个类了,是不是它就创建,它就执行,因为它属于类,这两个属于对象嘛,对吧,这两个区别。OK吧,这个应该很清晰啊好。记录一下这个代码。再来执行。OK,好。对吧。通过我们上面写这四个例子,大家对于这个类里边的它的这个代码块,它的这个常用变量啊,包括静态的非静态的,包括它的问方法,这个执行顺序大家应该很清楚了啊,再来说一下这个静态的东西属于类,所以只要使用到这个类静态的东西,它就会去执行,非静态的东西它属于对象。
15:20
所以只有当我们在拥有对象的时候,才会去执行这个非静态的,而且呢,静态的东西它只执行一次,因为内存里边只有一个类。它不会有多个类的,对吧,就一个类,它只有一个运营室类,它不会有多个的,所以说静态的东西它只执行一次,但是对象是可以有多个的。那么对象有多少个这个非静态代码,它就会执行多少次。把这个关系记住就OK了,好,接下来我们加大难度啊,就是我们把这个父子级的进程呢,也给它加进去。如果说我们涉及到父子级的一个继承的话呢,我们来看它是一个什么样的一个状态啊好,这边我们首先来写这个代码。
16:01
把这个删了。比如说呢,我们来定义这么一个类吧。啊的话呢,是我们一会儿需要用到的一个资源啊。然后呢,我这边给它加一个呃,构造器。构造器的话呢,是一个有参国藻传一个四军。SR传进来。这边我们来输出是S撇加。Object。是一体的。啊,我为了区分这个tu的一个不同的对象嘛,所以我传来传过来一个str啊,然后我们这边输出,所以str加object created对不对,就等于是创建这么一个六对象,但是呢,我是根据这个str去创建的。好。然后接下来我们就写这个负类,负类的话就要排。
17:01
在partner里边的话呢,我们这边就给他来一个静态的对象。我们叫part。Study。Tu等于你一个tu。把这个参数传进去。参数叫什么呢?参数叫我们这个啊parent。对吧。A static,静态的父类。Object杠啊,指的是我现在是在负类当中啊,创建一个静态的一个CP对象,这个意思吧。好,然后这边我们去加一个static静态代码块,这里边就写什么呢,我们就来写parent。Static code。It's。OK,好。然后呢,我再去写一个代码块。没有静态了啊。
18:02
Sta。It。对吧,包括呢,我这边再来创建一个。S对象,但是它是它不是一个静态,它是非静态的。等于又一个六。参数是什么呢?就是parent object。跟这区分开啊,没有在这个了,OK好。非常简单吧,我们再来去写一个它的读导写。呃,咱的构造器里边我们写无仓的,不带这个参数。这边的话我们来输出。Parade。Constructor。Con executor。
19:00
是否说处理的多导体在执行?好,执行了之后的话呢,诶,我们在这儿再去定一个,你看我再来定一个tu。对象,但是呢,我这个我的赋值是放到构造器里边的啊,所以你看我这个代码写出来就比较复杂了啊,把这个复杂的代码搞定,如果说你这个逻辑能搞清楚,那么无论它怎么变都是没有任何问题的。我叫parent。Constructor。Create object对吧,指的是我我们这个随对象的话,它是在附列的构造器当中去创建的啊,所以你看我们现在一共有。有三个修对象,一个是在构造器处力构造器当中创建的,一个是呃,它的一个非静态的一个传变量,一个是静态全变量,对吧,三个tu啊好。然后的话呢,这边我们再来写一个方法吧。写一个public。
20:00
我们叫say hello。写一个say hello方法,这个say hello方法的话,我们写一个hello from什么呢?Parent啊,这个hello来自于类。这是咱们的父类。分类写完之后,我再来学此类啊。写一个child。然后呢,是不是肯定要去继承派。继成拍了之后的话,我们要干嘛呢?同样的,我也是在这去给他定义一个静态的。就不对象。我们叫child。Static。Object等于new一个。16个,然后这时候这个参数什么,是不是我们的此类child。Static object。高对吧。
21:01
OK,静态代码块走一个。Child dele。Cold倍速的。好,然后呢,再来一个代码画。就跟那个父类里边是一样的。我们叫child。Cold it's。制造的,再来一个stupid对象,非静态的stupid对象。等于new一个。这时候这个参数什么呢?就是。Child。扣的对吧,啊跟这边对应起来,这边叫什么来着。Parent object啊,这边我们叫child,呃,Child object可以可以了。
22:00
Object。跟这边对应起来吗。对不对。哦,这这写错了,这多写了一个这个。啊,Static啊,看一下有没有问题啊,这写多就就容易乱啊,Parent static object parent static code cut parent code excu parent object OK,没问题。Child static object。对应起来,Child static code child child open,没有问题啊,好走,再往后走。然后接下来的话,跟这边一样,我再来定一个tu。这个的话呢,我就在此类的构造器当中啊,去给它创建。嗯。好,首先的话,我们去写一个说child。我把这个代码复制过来吧。Child。
23:00
然后这边也改成chair了。OK,好。对不对,同样的,最后一个是来一个这个say hello的方法,Say hello的话,我们说这个hello from就OK了。来自于。的一个这个哈。OK,代码写完了啊,这是父类和此类,好,写完之后的话,我们再来写这个。测试类。把它们给它用起来。论方法走。这里边儿大家怎么去写呢?我们创建一个child啊。等于又一个好了,然后呢,我这边来调这个char的这个c hello方法。对吧。我们来看这个结果。然后我再给你写一个吧,我再给你写一个这个chair的,我把这个差的我再给你强转成拍你看。再给你强转成partner,然后强转成partner之后我再去调c hello方法,所以这个就很复杂了啊,我把这个常考的这个题型呢,全部包含在咱们这个代码里边,创建一个此类对象,然后创调此类的这个c hello的一个方法,然后我把此类强转成负类,再去调c hello,我们看结果是啥。
24:16
这个结果打印东西会比较多啊,咱们要一个一个去分析。OK,你看打印这么多东西啊,对吧,打印了这么多所为是parent static object created,然后parent static code以及child static执行,对,对吧,然后呢,是parent的一个code,以及parent一个对象的一个创建。然后呢,是parent的构造器的一个一个创建一个执行,以及构造器里边一个对象的一创建,然后呢是呃此类的一个code的一个执行,此类的这个成员变量的一个一个创建,子类构造器的执行,子类构造器当中的呃这个成员变量的一个创建,然后呢是两个。Hello,都是来自于child的,对不对?好,这么一个复杂的一个结果,我们现在带着大家一步一步来分析。
25:07
好,我们说加入复习。加入副子级副词类啊。来,我们先把这个代码记下来。然后我带着你一步一步去分析,把这个东西分析清楚之后,这块你就没有任何问题了。一通百通啊。把这个原理搞清楚,无论说它这个题型怎么变,咱们都是没有任何问题的。执行结果我先给大家截图截出来,然后呢,我们一步一步来分析,看这个东西到底是咋出来的。是吧,好,那现在我们开始分析啊,开始分析。对吧,开始分析时最重要的一部分,首先大家来看。是不是它首先是不是就打印了这个副类的static object created以及parent static code对不对,为什么是这样的呢?我们来看代码嘛,因为这个是你的代码的一个入口嘛,对吧,所以说你从这儿分析就OK了。
26:12
是不是首先我们去实例化了一个差的一个对象,那么实例化差是不是必然会去加载?必然会去加载这个chair的这样一个类。对不对,那么既然说加载的类之后呢,是不是它必然会首先去加载parent这样一个类。因为你这边在创建对象的时候呢,是不是它这边会去调这个子类的构造器,然后子类构造器,我们说这边是不是会默认有一个super,是不是调复类的构造器啊,对不对,那你要调复类构造器是不是肯定得把复类加载进来。对不对,所以说我们得出第一个结论,就是它首先一定会先加载负类,这是第一步加载这个parent。OK,那么我们说过只要加载parent,那么parent当中的这个静态的成员变量和静态代码块是不是肯定会优先执行的,所以这两个是不是就优先执行了,对不对?那这个怎么执行呢?是不是传一个参数叫parent static object杠传到这里边了,跟后面一批是不是object created,所以说你看结果是不是这个东西,Parent static object-object created没问题吧,是不是说明他先执行了。
27:16
他执行完之后再来执行这个吧,所以说看到结果是不是parent sta code,所以说先执行他们两个,因为我们首先要把这个parent这个类加载到我们的内存里边,静态东西它就会去执行。OK吧,这两个没问题啊,没问题之后呢,咱们再来看这个。第三行第四行,第三行第四行呢,执行的是此类的,此类的这个静态的一个对象创建,以及此类的静态代码块的一个执行是不是。分析一下,第一步我们说。首先他会首先。会加载这个parent。那么则parent中的。静态。代码块和静态成员变量。
28:04
会优先。执行对不对,这两个会优先执行啊,OK,第二步,第二步的话呢,我们把这个拍加载完成之后,是不是再来加载差的,因为你一定是先加载类再去执行啊。对不对,就必须呢,先把这个类。把这个把这两类呢,是不是加载到JVM内存当中,是不是才能去,才能去调对象,才能去创建对象,才能去执行各种方法,对不对,一定是先加载类啊,所以第二阶段的话呢,我们就去。加载这个chair,那么同理。Cha里边的这个静态东西是不是也会去执行的OK。对吧,没有任何问题吧,OK,所以说前面四行是不是都去执行这两个类里边静态的东西。好,接下来第三个阶段到哪呢?大家来看这个结果它是不是就执行了,呃,这个负类的。
29:02
代码块以及负类的一个成员变量。对不对。是不是执行这两个啊,而且它的顺序是不是先去执行代码块,再去创建对象,我们说过这个顺序是不是由它俩的书写位置来决定,如果说你把写上面,把这个东西写上面,是不是先会去创建对象,再去执行代码块。OK吧,所以说第三部分呢,第三阶段我们其实走的是这块,为什么呢。因为我们的类加载完成之后,是不是要开始创建对象了。是不是要创建对象对不对,这时候创建谁呢?是不是首先先创建还有的对象对不对,因为你有一个父子类的一个继承关系,虽然你这边创建是子类,但是因为它有父类,所以我们一定会先创建父类。对不对,先创建pattern对象,所以呢,我们看到的就是这个。拍类里边的这个代码块的执行,以及它的一个成员变量,一个创建,这个咱们上面已经讲过了,就是我们类里边的这个代码块和成员变量,是当你创建类对象的时候,它会去执行的。
30:05
OK吧?这是第三个阶段,好,接下来第四个阶段干嘛,第四个阶段它是不是创建了。看它没有去执行这个此类,而是干嘛呢?是不是去执行负类的构造器了,对不对,所以这个大家一定要搞清楚啊,他会去执行负类构造器,因为我们说我这边创建此类的时候,他会去。就是你这边调这个char的时候,构造器的时候,他会先去呃创建先会去调负类的构造器,但是它调负类构造器之前呢,他一定先去把这个类,把这个对象的这个信息呢,它给它创建出来,所以说这两个会先于构造区域执行的。对吧,这两个会先优先于构造器去执行的啊,所以第四个阶段才是去呃,执行这个parent的构造器,嗯。葡萄。完成对象创建,所以说大家看到的结果是不是这边啊。
31:02
来到这儿了。这是第一阶段,这是第二阶段,这是第三阶段,然后第四阶段是这俩。看到没有?是不是我们构造器的一个执行,然后呢,构造器创建对象嘛,对不对,你看这个代码嘛,是不是构造器去执行嘛,然后接下来是不是在构造器里边,我们又去拗了一个STU,然后STU传的参数是不是parent,呃,Control create,然后object是不是这个东西。没问题吧,好,所以第四步呢,是执行拍的构造器,那家第五步,第五步干嘛呢?就是现在我们在这儿已是不是已经把这个负类对象创建好了,接下来是不是要创建此类对象了啊,所以你看它的这个差的构造器是不是在这才去调用啊,所以它不是不是说一上来就就执行它,虽然说你看它这个代码写到第一行,但是不是说一上来先执行它,而是前面是不是执行了很多很多东西。加载类。对不对,加载父类,加载子类完了之后呢,去呃,创建父类里边的成员变量,去执行父类里边的这个非静态代码块,然后再去创建父类就行,这些东西全部做完之后,是不是才来到这儿。
32:11
对不对,材料这同时我们这边也不会直接去调它的构造器,是不是仍然会先去执行它的代码块,以及创建它它的成员变量,所以说第五个阶段,大家看到的是不是首先去执行child code以及child object一个创建。是不是这两个。没问题吧?没问题啊好,所以说第五个阶段呢。他干嘛呢,他要嗯。啊,这个这个我改一下啊,因为这边写的可能不是特别清楚,他要创建对象,先创建拍对象对吧,然后呢,呃,创建对象之前。七。创建这个对象的。资源对吧,应该叫先创建对象资源啊,那这边也是一样的,我们这时候呢,呃,创建char对象之前先创建对象的资源啊,我把这个再给大家截个图吧,好吧,这样的话你看的比较清晰啊啊,这是第一阶段的。
33:22
这个是第二阶段的。这个一定要搞清楚啊。第三阶段了。第四阶段的创建对象。第五阶段,诶第五阶段。第五阶段就来到这儿了。创建此类对象的一个资源。OK,第六阶段才是。调用child。
34:01
枯燥。执行吧,跟上面写一样啊,执行构造器完成对象创建。第六阶段是到这儿了,OK。看,终于快结束了。对不对。好,接下来第七第七阶段是执行这个c hello方法。对吧。大家可以看到。是不是这时候这两个哈都来自于尔?这是为什么呢?为什么呢?因为尽管呢,我们进行了这个强制类型的转换,但实际上对象本身还是内存当中的子对象,所以呢,都是来自于这个子对象调用,就等于你看我们这个代码,就第一行代码。第一行创建。拆对象的这个代码,是不是它就会把前面六个阶段全部执行完了,对不对,所以这个我们看到结果,前面绝大多数东西呢,都是因为我们第一个创建对象。
35:06
他会去导致的一个代码执行,然后后面这两个是不是。这个是不是肯定是有来自于这个hello来于这个的嘛,然后接下来我是不是又把hello,把这个char转成负类,再去调hello,这时候大家可以看到仍然是来自于child的,对不对,这是为什么呢?我们说。尽管进行了强制类型转换。但是。但实际上。对象本身,它还是内存中的。子对象对不对,所以呢,这个哈呢,都是来自于。这个差的。也就是说。尽管你这边呢,把它转成了副类的一个类型,但是这个对象本身它仍然是差的,你只是把它类型转了,但是它的呃本身呢还是一个,所以说你调它的c hello方法的话,它仍然是。
36:08
Hello from char,而不是hello from parent,对不对?你把类型转了之后,它不会说真的就变成parent,它还是char。明白的意思吧,OK,好,所以这个的话呢,就是我们嗯,类中这个代码执行顺序包括了我们类里边的静态的。代码块静态的成员变量以及非静态代码块以及非静态成员变量,然后我们再去结合父子类的一个继承的关系,对吧?这边又涉及到我们创建此类对象的时候,会优先创建类对象等等啊,各种各样的知识点是不是混合在一起,我们就把这个类中代码的一个执行顺序是不是给大家讲清了。相信通过我的讲解呢,大家以后在这一块在遇到类似的问题肯定是啊,肯定是能答出来的啊,对于这个思路的理解肯定是没有任何问题的,OK吧,好。
我来说两句