00:00
那接着呢,我们看一下这个代码块,课后呢,有两个小的题目,一个呢叫leaf test,一个呢叫上test,通过这两个代码呢,我们来看一下,把代码块这个构造器,嗯,还有包括你的一些方法呀,等等这个融合在一起,这个先后执行的一个顺序,先来看这个lef test。哎,涉及到就这两个,把它呢都粘过来,CTRLCCTRLV一下过来了,这个报名不一样,这个写一个三。好,保存一下,先来看一下这个lef test,通过这个呢,大家来体会一下,这个结构比较复杂的时候呢,到底谁先执行谁后执行的问题,好我这呢是一个class root。如果在里边静态代码块,非静态代码块构造器。
01:02
Mid作为一个root的子类静态非静态构造器,这儿还有俩还重载了,然后这个呢,还掉这个了。行,主要呢,大家关心的就是这个谁先执行谁后执行,所以呢,就看这个输出语句啊,然后呢,我又造了一个密的一个词类,这叫叶子了,静态非静态构造器。没了,下面我在这个测试类当中,我拗了一个lef,造了一个这个类的对象。问,执行以后,你看看他的这个先执行后执行的一个顺序是什么样子的,当然了,我们运行一下就知道了,是吧?那先分析一下呗,我去拗一个它是不是就先蹦到这啊,一蹦到这儿呢?我们说在拗这个子类的时候呢,先调用子类构造器,但是一上来我们是不是先得看看父类是怎么加载的呀,所以这时候一上来是不是先就蹦到这儿来了,又蹦到这儿的话呢,我们掉的是它,它呢一上来又掉它了。
02:10
那这个这个呢,是不是相当于第一行我给省略了一个修破空啊,所以呢,这块呢,你先别着别着急去加载你这个密呢,上来呢,修破空了,又跑到我们这个root这了,Root这块的话呢,诶,你试着是想调它的构造器,它构造器人家也有个修克空,是不是这时候接着还去找类。接着负类没显示写,那就是object了,所以呢,是不是先把object当中这个结构涉及到的一些方法啥的加载,就整个这个类相当于结构加载过来是吧?然后呢,是不是该加载它了,哎,加载这个root,我一加载root静态的是不是就出来了,所以这个时候呢,它就出现了,那这时候这个非静态的是否执行啊,现不执行,因为你还没有new对象呢,是吧,先是加载这个类的事行,那root呢,这个静态的执行完以后,那接着是不是root的它的子类这个me就执行了,Mid执行完以后呢,你这个lef。
03:11
静态的代码块就业执行了,所以说呢,先是把他们三者的静态代码块先跑一遍,表示呢,就是这三个类呢都加载了,然后。然后这时候你看一下,咱们实际上呢,我是想去扭一个leaf了是吧。我想你一个leaf。那这时候呢,就涉及到一个叫构造器,一个呢是不是叫非静态代板块了,对,那这时候就得看谁先执行谁后执行了,是吧?这呢,其实你要说这个事呢,是不是就回归到咱们刚才说的这里边这个问题了,构造器当中可以去执行代码块,容西执行这俩到底谁先谁后啊,哎,对代码块呢,实际上它是要先执行的,对,它是要先执行的啊,那所以说呢,我们要看的话呢,这个该执行它了,然后呢,呃,在执行它之前呢,得先执行它。
04:10
但是呢,你这又有,因为有修货呢,咱们不是还得去加载负类构造器,其实又蹦到这儿,这儿呢,又得先执行它,这儿呢,你又修货呢,嗯呃,这个构造器的执行又得先执行它,然后这个构造器的执行之前呢,这不那会儿说修复过嘛,所以又会蹦到这来执行,那已经晕了,那咱们赶紧看一下这个答案,答案呢就是这样子的,首先呢,先把静态呢都加载完,加载完以后还是呢,从我们这个负类开始,在调用构造器之前,先把人家负类的这个非静态呢先执行一下,因为代码块的执行要先于构造器,所以呢,你会看到先执行root的普通代码块,执行这个root的构造期了,然后它完事以后呢,开始又回到我们这个mid mid这块呢,先把人家的普通的非静态代码块执行一下,然后构造器执行这块出来俩是因为咱这写这了。
05:07
咱们调的是他是吧,这不这写的是super他嘛,咱调的是他,他之前的话呢,又调了它,所以先出的是这个无餐的。然后又又是有参的,然后这个完了以后,又回到我们的leaf呢,调你的普通的代码块,调你的构造器。有点绕是吧,哎,当然呢,就是为了让你绕一下,知道这个先后执行的一个顺序,那现在我又把这个打开。诶,这有什么区别啊,对这块想说的就是关于静态的事,我这加一个换行。就把这个拿掉就行了,哎,就是这个意思。我们把这个事儿呢,总结成一个话。
06:00
总结一个话叫什么呢?叫由父及子。就是先复类后此类,接着呢叫静态先行,是不是比较经典啊,又按照这个规则来就行,先考虑父,再考虑子,然后呢,静态呢,要先走这两条原则,这个清楚以后再来看这个丧,这呢又有点变化,这有一个father,属于一个负类static,非static构造器。感觉so easy似的是吧,这呢也是一个静态非静态构造器,没了下边下边的时候呢,我可以先把这个事儿呢先注释一下。先不管了,这个也先注释了。我在这个may方法里边,我写了个CA啊,然后接着一条线,然后接着是个new桑好,这时候结果是什么?先777,感觉上是我一上来没方法,一上来就塌了是吧,咱们说我没方法,你除了是入口之外,你也是一个普通的静态方法,你这个方法是不是也得通过类去掉,那你类掉之前是不是类得先加载啊好了,先出什么,先这个吧,在这个吧,对,然后你是不是才777啊,哎,有点意思了,你发现这个原来在妹之前呢,还做了好多事,哎在后边呢,这个大家就清楚了啊,执行对吧。
07:51
七之前的话呢,先有一和四,然后呢,这一条线,这条线完了以后,你用了个上,然后又跟咱们刚才讲的那个leaf那个T一样了,负类里边的这个二三,然后再你这个五六这样子,行,这个清楚以后,后边这块就都好说了,嗯,我这再去扭一个丧,这个呢就跟刚才一样了,静态的就不走了。
08:17
嗯。看这了是吧,就是这个是我们用新旧的这个丧失在这这个呢,是不是就光考虑你当前这个非静态的结构和构造器了,静态的就不用瞧了,那我下边呢,又把这个new father打开。那就光把你自己的这个执行一下呗。行,就这里边呢,相当于又强调了另外一个事,就是没方法,虽然作为入口,但是它也是一个静态方法,这个静态方法那也得是通过你这个类调的,那类调之前类得先加载,那静态的结构又会先执行好,那这个问题呢,咱们就说清楚了。
我来说两句