00:00
好,那么接着的话呢,咱们来看一看,叫方法断点,诶方法断点呢,顾名思义啊,我们把这个断点呢,就点在了咱们方法的签名上啊,也就是方法的声明上,诶当我们在进入这个方法啊,也就是说调用这个方法的时候呢,我们这个断点呢,就被唤醒啊,也就是说这个代码呢,就停留在啊当前这个方法执行的第一行代码这儿了。啊,咱们呢也可以呢去修改,比如说改成了在退出方法的时候呢,这个断点也被唤醒啊,就是这样个情况。好,那这块呢,我们来看一看这个代码的一个啊举例啊,在这个DEBUG02里边啊,我们呢,写好了这样的几个类啊,首先呢,做一个简单的说明,这呢我定义那个father类啊,也就是一个父类啊,里边呢声明了一个方法啊,有两行输入语句,然后接着呢,定义当前这个类的一个子类,叫做丧啊,然后呢,诶,我们去,呃,这个重写了父类中的这个方法。啊没问题,然后接着的话呢,我又定义了一个接口啊,里边有个抽象方法,然后呢,接口有个实现类啊,把这个抽象方法呢做了一个实现啊没了,好,那我们来看上面这个测试类啊,哎,测试类呢,首先哎我们看一下第一个。
01:02
啊,第一个这个场景这呢,我们就用了一个哎散的对象,然后呢,通过这个散的对象呢,调咱们这个test方法,那么我们在这个test方法这块呢,诶它的声明的位置呢,咱们哎加上一个断点。那这时候这个断点呢,它就是一个菱形的。啊,如果呢,我们是点在啊具体的这个执行语句上呢,它是一个圆的啊,都是红色的啊就是咱们没有通过这个颜色呢去区分啊,因为怕有一些呃成员呢,它是有色弱啊或者说这个色盲了是吧,这个我们用的是这个呃形状啊啊应该没有这个形状,这个弱形状盲的吧。啊,应该没这么夸张的啊行,那这块我们就点到这儿了,点到这以后啊,当我们这个方法被调用的时候呢,这个断点呢就起作用了,那你看我们这块呢,去做一个de bug。好大家看,那么这时候呢,我们这个,呃,代码就停留到这个位置啊,咱们是在调这个test方法,诶停留在我们第一行代码的这个位置了啊没问题啊,诶那这块呢,也没有任何的输出,诶我们往下呢,执行一行代码。
02:03
啊,那这块呢,我们是不是就有一个哎萨哎TEST1哎这样一个显示没问题是吧?好那么回过来啊,诶这块呢,我们点一下这个操作,哎点下这个操作的话呢,我们就直接呢,诶点一下呃程序呢就结束了,相当于呢,我们这个程序呢,呃进入方法的时候呢,停留一下,我们再一点后边也没有任何断点了,直接呢就退出。我们还可以呢,你看在我们这个断点的位置呢,右键这块就能看到啊,我们在这个进入方法的时候呢,会做一个啊断点的停留,我们也可以呢,把它勾上,在方法退出的时候呢,也有一个停留好。啊,确定一下啊,确定好以后呢,我们再去做一个第八个。大家看这时候呢,我们进入方法啊停留了,我再点一下这个操作点,诶你会发现呢,它在这个位置呢,也给停留了,就是因为我们当前呢,要退出这个方法了,诶所以它呢也有一个断点被唤醒的一个操作啊,我们再点是不是就结束了。啊没问题,好这呢,就是咱们说的这样一个断点的一个情况啊,然后呢,回过来咱们把这一行代码呢,给它打开啊,上面这个呢,我就给它,诶主使掉了。
03:05
好,那么这个的话呢,我们是new了一个散是吧,然后把它呢附给了father,哎,那这儿呢,可能有些同学呢,就看不太明白了啊呃,那么这个代码呢,实际上是我们讲的面向对象的这个多态性啊,如果呢,呃,有些同学呢,呃,学习这个idea的时候呢,只是学习了,比如说像变量的定义啊。呃,这个呃循环呀,条件判断呀。诶包括呢,像数组啊,诶光学了这些内容的话呢,呃,下边这个代码可能看起来就比较吃力,包括我们这个代码呢,涉及到就咱们这个呃接口的一个使用了。那么要想这个代码能看得懂,大家呢,最好你把面向对象学完以后啊,再来看就清楚了。所以说这个debug这个功能呢,诶,那么对于刚开始学习呃,这个Java的同学来讲,你可以先放一放啊,学完面向对象的时候呢,你再看我们后边这个debug的操作也行啊也行。啊,当然你要提前看的话呢,这块可能会呃有点难度,但是也能够呃往下顺一顺是吧,因为主要呢,你看一下我们这个呃,这个具体的这个debug的步骤啊,而不是关注这个代码的细节了,对吧。
04:07
好,那么接着咱们来说啊,现在呢,我们把这个呃散的这个实力赋给了一个father,这呢是一个啊类的这个多态性的一个体现。啊,多态性的一个体现啊,那么这块呢,相当于是一个接口的多态性的一个体现啊。呃,那么这块呢,我把这个断点我点到哪儿呢?诶,我故意的就把它点到咱们的类的这个声明上了。啊,因为从这个编译的角度来看呢,你看我们这个按住CTRL键啊,我一点是点到负类这了,接口这块呢也是啊,我一点是不是就点到接口声明这了,但实际我们执行的话呢,诶相当于运行的都是咱们的具体的子类的,呃重启的方法啊这呢也是呃实现类啊实现的这个方法了。我在这儿呢,点了一个。是吧,哎,那我们在,呃,在这个位置啊,咱们也点一个吧。都点了是吧,好,那么这时候呢,你看我们去做一个啊第八个。走起了啊,这时候大家你会发现呢,我们明明没有在这个散那个位置上去点,但是呢,他也在这停留了。
05:06
啊这呢,就诶出现了一个情况啊,我们称为呢,叫做代码的重写啊,代码重写其实就是一个。呃,我们叫这个方法的重写,其实呢,就是一个覆盖。哎,我把它那写出来了。诶,也就是说我们这个在运行的时候呢,这个T方法对刚才类中的这个T方法完全是一个覆盖的行为。哎,所以呢,当你负累这个呢,呃,被这个debug的时候呢,这个被唤醒的时候呢,我们这个呢,现在也被唤醒了啊,所以呢,这时候这代码就停留到这了。啊,通过这个呢,其实我们也能够看出来什么呀。啊,就是咱们实际执行的呢,是这个子类重写父类的这个方法。没问题是吧,好,那么这时我再点它,诶注意这时候呢,我们没有设置这个方法,退出的时候呢,它去有这个呃第八啊,有这个这个断点的一个唤醒啊,所以我们再去呃,执行的话呢,呃,你会发现呢,直接就欢迎到我们这个接口的视线类的这个位置了,因为咱们上边这块不也加了个断点,所以在这呢也停留了。
06:02
没问题是吧,啊,我再一点啊,这就结束了。这个应该清楚吧,哎这呢,就我们说的这样个场景啊好,那下边这块呢,我们也可以把它呢,哎打开,哎那么这个的特点呢,是什么呢?就咱们对应的是啊API当中的啊,比如map里边有个方法叫做put put方法里边又调put v啊又里边呢调一下啊比如我们这个方法现在呢,假设我们想看一下这个re方法,诶在被调用的时候呢,它的一个啊执行情况,诶我们就可以在这个位置呢加上一个断点了。啊,那么回过来以后啊,我们这块呢,就做一个debug的执行。那么当我们再去调这个,哎put方法又调put v啊V啊调这个的时候呢,哎,在这个位置呢,就做了一个停留。啊,那就相当于呢,对于源码中的这个方法啊,它的这个生命位置加的断点仍然呢是适用的啊OK,行这呢,就我们说的这叫诶方法断点的一个,诶使用情况。啊使用情况,那你看我们这个位置呢,它还有一个呃,显示的这样一个情况是吧,这就是查看我们当前这个程序当中啊,加断点的这样的一些位置啊,诶这是它,然后呢,你如果希望呢,这个程序在执行的时候呢,这个断点呢,都不起作用啊,你可以点一下我们这样的一个按钮。
07:12
啊,你看这时候已经点上了,点完以后的话呢,我们在map里边啊,这块你看似是有,但实际上呢,你看我们再去做一个debug执行的时候呢,这个程序呢,你看就直接就结束了,那相当于呢,咱们这个断点呢,都没有起作用。就是这个意思啊。好,这呢,就是我们说的这个叫诶方法断点啊,它的一个情况。
我来说两句