-
异常的分类
1. Error(错误):Java虚拟机无法解决的致命问题,例如StackOverflowError[栈溢出]
2. Exception(异常):其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等等,Exception又分为两大类:运行时异常(不用立刻处理)和编译时异常(需要立刻处理)。
-
五大运行时异常
1. NullPointerException空指针异常
如果一个引用对象地址为null时,调用该对象的成员会抛出该异常。
2. ArithmeticException数学运算异常
被除数为0时抛出该异常。
3. ArraylndexOutOfBoundsException数组下标越界异常
如果数组索引为负或者大于数组长度-1时抛出该异常。
4. ClassCastException类型转换异常
试图一个将对象强制转换为不是该实例的子类时,抛出该异常。
5. NumberFormatException数字格式不正确异常
当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常 => 使用异常我们可以确保输入是满足条件数字。
-
异常处理的两种方式
1. try-catch-finally,捕获异常并尝试解决
2. throws 将异常抛出,交给调用者(方法)来处理,顶级处理者为JVM
-
try-catch-finally细节
1. 快捷键:ctrl + alt + t
2. try代码块里某一行代码发生异常后,直接跳到catch代码块,try后面的代码就不会执行了
3. 如果try代码块没有异常发生,则不会进入catch代码块里,会顺序执行finally代码块如果有的话
4. finally代码块是无论如何都要执行的,哪怕return也要执行,不管有没有进catch代码块。
5. 可以有多个catch语句,用来捕获不同的异常进行不同的业务处理,但是要求子类异常在前,父类异常在后,例如NullPointerException必须在Exception异常前面。
6. try-finally组合可以省去catch代码块,但这意味着不对异常进行处理,一旦遇到异常会直接执行finally代码块后程序崩掉
-
throws细节
1. 可以throws该异常的父类
2. 可以抛出多个异常,接收时也需要接收对应的异常
3. 子类重写的方法,抛出的异常类型必须是父类方法对应异常或是其子类异常,例如父类抛出Exception,子类必须为Exception的子类异常,也就是说子类重写后异常类型需要更加精确
4. 运行时异常若不处理,默认throws抛出,例如f1()方法抛出RuntimeException,f2()方法接收就不用专门去throws这个RuntimeException了。