00:00
大家好,我是海波老师,接下来我们来讲一讲Java语法中的错误,我们在这里呢,我们点击右键,我们选择new,然后创建一个package啊,咱们叫chapter,我们的零六好回车,回车以后呢,我们在这里点击new,然后创建Java class,我写上叫JAVA01,写个下划线叫exception,这个就表示异常啊,错误的意思啊,咱们点击class。咱们在这里呢,写上men,然后呢写上todo,诶,我们叫做错误好了,那么说到错误啊,咱们见到很多了,那比如啊,我们现在写段代码,咱们看一看,我写上一个叫字符串,我们叫S,它等于123好了,写完之后呢,我们写上叫integer,我们叫包装类型,它等于我们的integer s。好了,我们这么写完以后,大家会发现我们这里发生了错误,我们为什么会发生错误呢?非常简单,因为我们说过了,如果我们想将两个类型做转换的话,必须两个类型之间有关系,我们才可以做强制类型转换,但是咱们这里的字符串跟这个叫in提的这个包装类型,他们俩没有任何的关系,所以这个地方就发生了错误。所以我们这里说一下我们的一。
01:08
类型转换啊,出现了错误,好,这是我们的第一个问题,接下来我们再给大家写一个,我们写什么呢?我们写一个递归的方法,我先把这个注掉啊来注掉。然后呢,我写上一个递归的方法,咱们叫public static word叫test好,写完以后,我们之前给大家讲过,如果我们的递归它没有跳出的逻辑的话,就意味着他自己调自己,这就叫递归,但是呢,它没有跳出的逻辑,它也会出现错误,所以我们写上它,诶我们叫test好了,写完了之后,我们运行一下看问题,你会发现我们当前的这个错误呢,诶就出现了这个错误呢,它是什么呢?叫做sta overflow,这个咱们之前给大家提过,叫战役出啊,所以我们这里来啊,这是我们的第二个错误,哎,写上它。我们叫做递归,它没有跳出的逻辑。
02:00
好了,那么这个地方就会出现一个叫stack overflow arrow的这么一个错误,啊,好了,把它注掉,接下来我们再给大家演示一个错误,这里呢,我们写上一个class,我们就叫U好了,写完之后呢,我写上它,咱们叫UU,它等于那。然后呢,接下来呢,我打印一下咱们叫u.to string方法,这个非常的简单,我当前呢,我声明一个变量,但是没有指向任何的内存空间,我们在这个地方呢,我们就直接调用了它里面的这个叫图使string方法,这个时候如果我们执行的话,点击右键,它就会出现一个叫空指针异常。所以我们放到这边,我写上它三。访问啊,一个围空对象的成员方法时出现了错误,那么这个错误呢,我们称之为叫Java点浪点no pointer exception行了,演示到这就可以了。以上这些呢,笼统的来说呀,我们都称之为叫错误,但其实是有区别的,它区别就在于啊,我们的第一个呢,它其实是我们语法写的不对,我们Java当中有明确的语法规则,你没有按照我们的语法规则去完成,所以它这是不对的,所以啊,咱们idea呢,会标上红色波浪线,让你去改一下,只要你的语法呢,符合加入的语法规则的话,这个程序就没问题了。像咱们当前把一个字符串转换成一个整形,我们这里呢,不是这么做的,我们如果想做的话,我们应该是I,它等于叫inter点,叫pass in,你这么写的话,我们语法就是允许的了,所以啊,这纯粹是语法上的错误,好了,这是我们的第一个,第二个错误呢,它不是语法上的错误,它是我程序执行时的一个错误场景,在Java中它会用一种。
03:42
特殊类来描述这种场景错误,我们称之为叫A。这个我们就称之为叫错误,针对于不同场景下的错误呢,这个L会使用不同的子类来表示,我们来看一下它的层次体系,我们这里找一下,来我们写上I,好,我们这里去找到它。
04:01
找一下以后,你会发现Java点浪这个包里面就会有一个L,它也是一个我们的类,它继承了我们的throw able就是这样的啊好了,那我们要看看它的子类都有哪些类呢?所以我们这里CTRLH看看它的层次体系,你会发现它里面会有大量的一些我们的AR对象,对吧?其中呢,这里面有个叫VI machine arrow,它里面会有一个叫stack overflow arrow,这个呢,就是我们刚才所给大家演示的那个叫战役出的这么个错误。当我们向内存中存储数据的时候,如果内存无法容纳大量的数据,那么也可能出现我们的这个叫out of memory error,这叫内存溢出的错误,那我们简称为叫OM,其实啊,无论什么样的错误呢,他们都会有一个显著的特点,就是我们一旦发生以后,Java虚拟机会自动停止,它无法恢复,所以啊,我们在开发程序的时候,我们要尽量避免这样的错误,否则Java虚拟机就可能异常关闭,导致数据不安全,系统损坏,这就是我们的第二个啊,所以咱们协商啊,尽量要避免。
05:03
尽量。避免咱们的第三个呢,它也是错误,但这个错误呢,我们在加入中啊,咱们称之为叫异常。这里的异常呢,和正常是相对的啊,那一般情况下代码都是按照逻辑正常执行的,但是遇见一些特殊的场景,就会偏离正常的逻辑而导致程序运行失败,这种偏离正常的逻辑呢,我们就称之为叫异常了。在家务中,异常采用exception来表示,所以我们这里就会有个exception,每一个具体的子类也用于描述特定的异常场景。在Java中,我们会根据异常的解决方案,它分为两大类,咱们说一下。加我中。我们的异常。它分为两大类,那么分成哪两大类呢?我们这里说一下三点,一、可以通过代码恢复正常逻辑执行的异常,我们称之为叫运行期异常。
06:01
那么这样的异常呢?我们都会有一个共同的类,它称之为叫做runtime exception,我们叫runtime exception。啊,它我们都是可以通过代码给他恢复的啊,代码执行时只要出来了异常,一般加入虚拟机会提供相应的错误信息,我们只要根据那个提示信息来解决就可以了,异常呢,还有一类呢,就是无法通过正常的代码逻辑解决的异常,这类异常如果不及时进行处理的话,就可能会导致加入虚拟机的异常关闭,所以在编译的时候,编译器就会提醒你对这样的异常呢进行处理,所以这样的异常我们称之为叫编译器异常,所以我们这里说一下称之为叫编译期。好了,那么这里说一下,就是不可以。通过代码恢复正常逻辑执行的异常,我们就称之为叫编译异常,这里我们再强调一下,这里所谓的编译器的异常,它只是编译器会在编译的时候进行提醒,而不是真正会发生这样的异常,比如我们的系统啊,连接服务器,但是服务器可能没开啊,所以编译器就会提醒你,针对于这种情况,你必须做出处理,否则程序会出现错误,那我收到提示以后,是不是就该考虑我该如何来处理了,对不对?这就叫编异常。那咱们前面讲了,针对于不同的错误场景呢?Java提供了很多的异常类来描述这些场景,但这些场景当中啊,有的错误的范围比较大,有的范围比较小,比如啊服务器连不上的错误,这个错误的本质就是咱们的应用程序无法通过网络连接上服务器,所以啊,它也属于网络异常。
07:37
而连接网络本质上又是计算机的输入和输出的处理,所以它也属于输入输出的异常,所以根据异常范围的大小呢,就存在了重属关系,在Java中这种从属关系就体现为继承关系,范围越小的类,它的错误就越详细,这就是子类异常,范围越大的类,它的错误信息呢就越粗略,它就是负类异常。在Java中运行,其异常的范围最大的异常类就是我们的wrongtime except,而我们的编译器的异常,它的最大范围的类,它应该叫exception,所以说它是两个不同的东西,这里呢,我们给大家去看一下,首先我们就看看我们的runtime exception,我们拷贝,拷贝以后我们这里找一下,你会发现它在Java点浪包里面,我们打开,打开以后我们看一眼,它继承了我们的exception,然后呢,我们CTRLH我们看看一看。
08:27
你会发现它下面会有很多的这些类,这些类它就描述了不同的异常场景,这个大家知道就可以了。好,这个是我们的runtime exception,它是可以通过代码就能解决的,而我们不能通过代码解决的,我们说了我们的编译器就会提示你,它的那个范围最大的异常呢,就叫exception,所以我们找一下来,这里面就有嘛,我点它一下,点点完了以后它继承了,所以呢,我CTRLH,我看一眼,看一眼以后你会发现它里面东西还是特别的多的,所以啊,我们的异常其实会有很多,那么咱们在后面的语法当中,就要对不同的异常进行我们的捕捉处理,好了,我们异常的介绍就先到这里。
我来说两句