1、异常:分为 编译时异常 和 运行时异常,意思是:程序中可能出现的问题。
2、异常体系的最上层父类是:Exception
3、编译时异常和运行时异常的区别:
- 编译时异常:没有继承RuntimeException的异常,直接继承于Exception,在程序进行编译过程中就会出现错误提示,在编译阶段,必须手动处理,否则代码会报错。
- 运行时异常:RuntimeException本身和子类。编译阶段没有出现错误提示,运行过后会出现的异常。
4、java程序在编译阶段,不会运行代码,只会检查语法错误,或者做一些性能的优化。
5、异常的作用:①程序有bug时,我们的能在控制台看到信息,从而提醒我们的程序哪里出问题了
②异常可以作为方法内部的一种特殊的返回值,用来通知调用者底层的执行情况。
6、异常的处理方式(3种):
<1> jvm默认的处理方式(首先将异常信息输出在控制台,然后程序执行到这停止,下面的代码将不在执行)
<2>自己处理(捕获异常,try…catch),其目的是:当程序出现异常的时候,让代码可以继续向下执行。
<3>抛出异常(throw、throws),这个是用在方法中的,方法中出现异常的话,这个方法就没有运行下去的必要了,此时我们采用抛出异常处理,停止该方法,并且告诉调用者出现了问题。
7、注意:如果我们要捕获多个异常,这些异常类型中如果存在父子关系的话,那么父类一定要写在下面。
8、捕获异常时可能遇到的四种情况(总结):
9、异常信息的输出所使用的方法:e.getMessage( )—方法返回String类型结果,e.toString( )—也是返回String类型的结果,e.printStackTrace( )—没有返回值,最常用的方法,红色字体打印出异常信息,异常信息内容包括了之前两个方法打印出的内容,并且此方法仅仅是打印信息,不是停止程序的运行。
10、无论是否捕获异常,finally中的内容是无论如何一定进行执行的,它是异常处理体系中的一部分。
★★★return在try…catch中的作用及影响★★★
- 异常finally中为什么不建议使用return语句???- 因为当在finally中执行return时会覆盖try catch中的reutrn,所以一般不建议使用。
- retrun一般都放在try和catch的最后,因为在一个方法体中return后面的语句不再被执行。
11、如果声明的异常是一个运行时异常,则方法定义处声明的代码可以省略不写(例如:throws RuntimeException,可以不写),但是如果是编译时异常,则声明的代码必须手动写出。