1.java内置的异常类可以处理大部分异常情况。此外,用户还可以自定义异常,只需继承Exception
类即可。
2.在程序中使用自定义异常类,大体可分为以下几个步骤:
(1)创建自定义异常类
(2)在方法中通过throw关键字抛出异常对象
(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处用throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
(4)在出现异常方法的调用者中捕获并处理异常
3.实例代码:
首先定义了一个自定义异常类 MyException
,它扩展自 Java 的 Exception
类。主要功能如下:
(1)字段: private int detail
; 用于存储异常的具体信息,通常是一个数字。
(2)构造函数: public MyException(int a)
接受一个整数参数 a,并将其赋值给 detail 字段。
(3)toString方法: 重写了 toString
方法,返回包含 detail
信息的字符串,用于描述异常。
这个类在数字大于 10 时抛出。
package com.exception;//自定义的异常类
public class MyException extends Exception{ //继承Exception类//传递数字>10就抛出异常,定义int类型的变量private int detail;//写一个有参构造,快捷键 alt+insertpublic MyException(int a) {this.detail = a;}//重写toString方法,自定义异常,快捷键 alt+insert选择toString@Overridepublic String toString() {//会抛出的异常信息return "MyException{" +"detail=" + detail +'}';}
}
定义了一个类 Test3
,其中包含一个静态方法 test
和 main
方法。具体功能如下:
test 方法: 接受一个整数 a
,并抛出 MyException
异常。如果 a
大于 10,则抛出自定义异常;否则,打印 “OK”。
main 方法: 在 try
块中调用 test(11)
,由于 11 大于 10,抛出 MyException
。在 catch
块中捕获该异常,并打印异常信息。
package com.exception;public class Test3 {//定义test方法static void test(int a) throws MyException { //捕获异常System.out.println("传递的参数为:" + a);if(a>10){throw new MyException(a); //抛出异常}System.out.println("OK"); //a<=10时输出}public static void main(String[] args){/*调用test方法,由于在test方法定义中使用了throws throw,调用的时候必须要try catch 捕获异常*/try {test(11);} catch (MyException e) { //e会调用toString方法System.out.println("MyException=> " + e);}}}
结果:
4.总结
(1)运行时,逻辑合理,辅助try-catch处理(程序就不至于突然卡死)
(2)多重catch块后面,加一个catch(Exception)处理可能被遗漏的异常
(3)对于不确定的代码,也可以加上try-catch,处理潜在异常
(4)尽量去处理异常,切忌只是简单地调用printStackTrace() 去打印输出
(5)具体如何处理异常,要根据不同的业务需求和异常类型去决定
(6)尽量添加finally语句块去释放占用的资源