Java异常处理
一、概述
-
编写代码过程中难免会出现一些问题,例如客户端的输入格式、网络是否流畅等。此时程序员则需要考虑处理异常,Java语言中发生的不正常情况称为"异常"(开发过程中的语法错误或逻辑错误不是异常)
-
Java程序在执行过程中发生的异常事件可分为两类:
- Error:Java虚拟机无法解决的严重问题。如JVM系统内部错误、资源耗尽等严重情况。例如StackOverflowError和OOM
- Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针异常、读取不存在的文件、网络连接中断、数组角标越界……
二、体系结构
三、异常处理
3.1 try-catch-finally
try{
//可能出现的异常
}catch (异常类型){
//处理异常的方式1
}catch (异常类型){
//处理异常的方式2
}
……
finally {
//一定会执行的代码
}
-
finally是可选的
-
使用try将可能出现异常的代码包装起来
-
try中的异常对象匹配到某一个catch时,就进入catch中进行异常处理。一旦处理完成,就跳出当前的try-catch结构(没有写finally),继续执行后面的代码逻辑
-
catch中的异常类型,如果没有子父类关系,则声明的位置没有关系。如果满足子父类关系,则要求子类一定声明在父类的上面,否则会报错
-
常用的异常处理方式:String getMessage(),printStackTrace()
-
使用try-catch-finally处理编译器异常时,程序在处理异常时编译期不会出现错误,但是运行时仍可能报错
-
finally:finally中会包含一定会执行的代码
-
在return执行之前会先执行finally结构中的业务逻辑
-
try-catch-finally结构可以相互嵌套
3.2 throws
- throws+异常类型
- 当出现异常时,产生异常处会生成一个异常类的对象,此对象满足throws后异常类型时,就会抛出,异常代码后续的代码就不会被执行
- throws的方式会将异常抛给方法的调用者
- 如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中有异常,必须使用try-catch-finally方式去处理
3.3 手动抛出异常
throw new RuntimeException();
3.4 自定义异常
class MyException extends RuntimeException{
public MyException(String msg){
super(msg);
}
}