Java核心技术系列之华东师范大学Java核心技术第九章Java异常和异常处理
异常处理机制目的
这个章节一般主要是代码中的异常处理机制,异常处理机制主要目的有以下三点:
- 允许用户及时保存结果
- 抓住异常,分析异常内容
- 控制程序返回到安全状态
异常机制方法
try-catch-finally结构
try必须要有,catch和finally至少有一个。
- try:正常业务逻辑代码
- catch:当try发生异常,将执行catch代码。若没有异常,跳过。
- finally:兜底,try-catch之后会执行的逻辑。如果catch中也发生异常,那么先执行finally逻辑,然后再报catch中的逻辑错误语句。
那如果catch块有多个呢?从上到下进行匹配的,因此一般小的异常写在前面,大的异常写到后面。
throws声明异常
我们也可以不对异常进行处理,调用带有throws的方法来进行异常声明,让调用方抛出异常或者对异常进行处理。
自定义异常
- 非RuntimeException,是CheckException,IDE辅助检查
- RuntimeException,是UncheckException,IDE不会辅助检查,需要程序员自行处理
在方法对异常的处理上,throw和throws有所不同:
- 在方法内部程序中,抛出异常采用throw关键字
- 在方法头部声明中,声明异常采用throws关键字
举个例子,定义一个自定义异常类,名为DefineMyException.java
,代码如下:
package chapter9;
public class DefineMyException extends Exception{
private String returnCode; //异常返回码
private String returnMsg; //异常返回信息
public DefineMyException() {
super();
}
public DefineMyException(String returnMsg) {
super(returnMsg);
this.returnMsg = returnMsg;
}
public DefineMyException(String returnCode, String returnMsg) {
super();
this.returnMsg = returnMsg;
this.returnCode = returnCode;
}
public String getReturnCode() {
return returnCode;
}
public String getReturnMsg() {
return returnMsg;
}
}
对其进行测试,测试文件名为
package chapter9;
public class DefineMyExceptionTest {
public static void testException() throws DefineMyException {
throw new DefineMyException("1001", "The reason of my exception");
}
public static void main(String[] args) {
try{
DefineMyExceptionTest.testException();
} catch (DefineMyException e) {
e.printStackTrace();
System.out.println("returnCode: " + e.getReturnCode());
System.out.println("returnMsg: " + e.getReturnMsg());
}
}
}
输出结果为:
chapter9.DefineMyException
at chapter9.DefineMyExceptionTest.testException(DefineMyExceptionTest.java:5)
at chapter9.DefineMyExceptionTest.main(DefineMyExceptionTest.java:10)
returnCode: 1001
returnMsg: The reason of my exception
总结
这里讲了4个点,整体上来说,是在Java中的处理机制问题。
1、try-catch-finally机制
2、throws声明异常
3、子类重写的方法所声明的异常不能超出父类规定的范围
4、自定义异常
4.1、自定义异常继承自Exception或者RuntimeException
4.2、自定义异常重点在结构函数
4.3、采用throw抛出异常