00:01
嘿,大家好。上个视频。咱们了解的就是Java中。这个异常。然后现在呢。咱们对上一节进行扩展。然后上一届遗留的遗中有一个是叫。No class放area是吧,然后它和class not found。那个exception它有什么区别?那节课是咱们是没有体验了对吧。然后在这个视频当中,咱们作为扩展的内容,然后进行介绍。如果想看上篇内容的小伙伴呢,可以去。对。然后首先呢。先看他们两个有什么不同。No no,那是一个错误。是一个错误。然后这个卡的放在哪。
01:02
Not not found exception,它是一个异常。然后在Java中,然后对这个错误和异常处理是不同的。对吧,所以它两个是分类是不同的。你看这个是怎么是不同的你。他们两个后缀是不一样的。一个是错误,一个是异常。关键就是在前面这个。然后呢,我们来看一下,就是它分析一下它这个产生的原因。像这个如果不在这说的话,你可能平时是不太注意的,然后然后现在的话,只要是在这一说的话,你肯定会想起来。你像这个class诺的放话那个不成的话。它产生的原因呢,就是。咱们信用Java。然后通过这个c.form name,然后这个方法来动态的加载这个力的时候。
02:02
然后他。然后下载这个力的时候呢,它就会被。这个类它就会被加载到JVM这个内存当中。如果这个类的这个路径,然后没有找到的话。那它就会报出这个异常。然后咱们也可以来做一下实验。因为我随便找一个。这是我写好的一个例子。为了不暴露出来我的数据库账号和密码,我现在只写一个。只写一个这个下载的。然后在这里做了一个这个执行。咱们看一下。现在我写的这个是个对的邮件,看看有什么问题啊。如果他有问题的话,他就会在这进行把它这个打印出来,他就摘信息。
03:02
异常摘信息,那看有没有。如果没有问题的话。那他就会不打印这些。可以看到他是没打印对吧。他只是说连接不到数据库,连接超时。但是他没有报这个错误,没有进入到里的,所以。证明咱们这个加载的这个类这个路径是对的,对吧。然后随便写的是。可以看到现在。我加了个三个意见。这个类显然显然它肯定是不对的。我们来看一下是不是和我们。预想的这个结果是一样的,就是咱们预想的结果是他可以进入这个类。进入这个,呃,开始。它是代码块。然后打印这一句话。
04:02
嗯,可以看到他打印出来了,第一次错误是什么,让他把这个列名给打印出来了。你看紧接着他上一个他就说了。java.class not found except。对吧,他又把这个一句话给说出来了。给你报出来。他们。放在这个里边。你看这样的话,这个类别是不对的,对吧,所以它报出来这个问这个错误。然后这显而易见就证明了咱们的观点。就是这个类名,如果是使用这个动态加载的话,如果这个类名是错误的话,它就会报出这这个异常对吧。这是他的一个问题。
05:02
还有呢,就是。再补充一下上节课的。上节课有一个地方。咱们说了。可检查和这个不检查。然后检可检它是什么意思啊,就在编辑的时候。那他进行这个处理。你看就是显示的这个进行捕捉处理。你像这种你必须要抛出来这个异常。你虽然你不抛出来,但是这个程序的话。在idea这个工具里边,他给咱做了这个提示,然后一个红的,你如果是使用。像很早很早之前的话,它是没有这种错误的是吧,对吧,就是在运行的时候它出现这种那个就是在编译的时候它出现。那个就是给你暴露出来。你现在他只是这个ID给咱做了一个预处理,然后知道了咱这个功能。就是必须要给他抛出来这个异常啊才是对的。
06:03
是吧,必须要抛出这个异常,然后咱们才能他才让你继续往下执行。所以这个是可检查的这个异常,然后不可检查的异常是什么叫空。控这控制人的异常对吧,还有这个。还有这个数字,约见。那也是属于这个不检查的对,不检查的异常就是在运行时的对。然后还有一个导致这个class not found,然后exception的原因是。在编译后或者打包后,然后人为的去损坏,或者是篡改打包或者文件,然后也会出现这个。然后这个分线步骤,然后我是经过我手动,我手动确定的啊。完全是可以浮现出来这个异常。那首先呢,我咱们创建一个boot这个项目。然后呢,打包成了炸包。然后把这个炸包中这个启动程序进行删除,删除的话,咱们就是人为的去损坏或者篡篡改这个炸包对吧。
07:07
然后就会出现这种异常,如果再启动的话。重新。就会出现这个异常。啊,咱们看一下。这是一个spring的一个项目,先看一下能不能启动。现在我没有去手动的去动它。嗯,可以看到他找到了这个启动类,对吧,成功的技能进行启动,如果能出现这个的话,咱们不必关心这个网站能不能访问,但是它启动成功了,对吧。先把它给关闭。呃,可以看到这是它编译之后的这个代码,对吧,我就不不去手动编译了,那它编译之后的这个他的文件。然后这个文件的,咱们可以给他做一个。可以把文件给他删了。
08:02
为了一会儿好测试,先把它移到桌面。错。现在他已经上了,但是他这个账文件是承认,因为账va文件它。就是那个就是源代码卡,总应该是编辑之后的。编辑。再次启动。那它就会出现这个问题。找不到这个。然后咱们现在看的是不太清楚的。可以怎么看,可以在这打包,打包之后呢,它会生成一个大包,我在这里呢,就是。这是第二个。咱先启动一下第一个。我把这个是他打包之后的。那看一下原来的这个打包之后能不能启动。
09:06
其实他其实其实他出现这个其实是已经代表的是没有问题的,对吧。然后你看它两个大小是不一样的,这个是我篡改之后的。能出现这个就证明他已经找到了,对吧,所以就咱不必关心他剩下的。嗯,对,剩下的这些内容,其实咱不必去关心。那只关心这一个,他能不能找到这个主力就对了。啊,现现在这个。可以看到它这个,呃,打包之后的是全在这里的,对吧。然后这个class文件是我删除手动处理过的,是我把它进行删除的。再看一下这个有没有。这个的话是有对吧,然后这个是我手动删除的。那咱们再启动一下这个二,看它有什么意思。
10:06
你看你你必须存在这个Java这个命令,这个配这个环境,你才能那个。今天七了。然后再启动。你看现在这个效果就出来了。不对吧。它就会出现这个问题。我把这个也粘贴过来。这样就证实了咱们上面所说的这两个就是比较准确的实现的这个能够复现这个问题的。这两种类型。然后呢,就是下另一种no class a father,然后error,然后它这个产生的原因是什么。
11:02
就是就是从网上找的,然后就是我也没有。把它给分享出来。他这样说的,如果GM或者class,呃,Load,然后那个实现尝试加载。加载这个类的时候,然后找不到这个类的定义了。就是它原来是可以的,但是呢,它用这个加载的时候。然后却找不到了,所以他就会报这个异常。是这样说的,你看在编译的时候是牵扯的,但是呢,在运行的时候找不到了,就会出现这个错误。这个我没有那个去正视他。但是呢,也不否认他是不是对。然后就放在这就可以了,然后大家现在应该就了解了这种情况了。
我来说两句