Day39--自定义异常及小结
自定义异常
- 使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。
- 在程序中使用自定义异常类,大体可分为以下几个步骤:
- 创建自定义异常类。
- 在方法中通过throw关键字抛出异常对象。
- 如果在当前抛出异常的方法中处理异常,可以使用try - catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
- 在出现异常方法的调用者中捕获并处理异常。
示例:
package com.liu.exception.demo02;
//自定义异常类
public class Myexception extends Exception {
//传递数字>10,异常
private int detail;
public Myexception(int a) {
this.detail = a;
}
//toString;异常的打印信息 Alt+Insert----toString
@Override
public String toString() {
return "Myexception{" +
"detail=" + detail +
'}';
}
}
写完异常类之后,我们要写测试类,测试我们写的异常
写可能会存在异常的方法
package com.liu.exception.demo02;
public class Test {
//可能会存在异常的方法
static void test(int a) throws Myexception {
System.out.println("传递的参数为:"+a);
if(a>10){
throw new Myexception(a);//抛出
}else {
System.out.println("OK");
}
}
public static void main(String[] args) {
try {
test(101);
} catch (Myexception e) {
System.out.println("Myexception--->"+e);
}
}
}
传递的参数为:101
Myexception--->Myexception{detail=101}
在 Java 程序中,程序的执行是从main
方法开始的。
- 程序启动
- 当你运行这个 Java 程序时,Java 虚拟机(JVM)会首先查找
main
方法作为程序的入口点。
- 当你运行这个 Java 程序时,Java 虚拟机(JVM)会首先查找
main
方法中的操作- 在这个
main
方法中,它调用了test(101)
方法。 - 当
main
方法执行到test(101)
这一行时,程序的控制流会转移到test
方法。
- 在这个
test
方法的执行test
方法被调用后,它会执行其中的逻辑。在这个例子中,由于a = 101
,a>10
条件成立,test
方法会抛出一个Myexception
异常。- 因为
test
方法通过throws Myexception
声明了它可能抛出这个异常,所以当异常被抛出时,程序的控制流会返回到main
方法中调用test
方法的地方。
- 异常处理
- 在
main
方法中,有一个try - catch
块来捕获Myexception
异常。当test
方法抛出Myexception
时,catch
块会捕获这个异常并执行其中的逻辑,即打印"Myexception--->"
和异常信息。
- 在
实际应用中的经验总结
- 处理运行时异常时,采用逻辑去合理规避同时辅助try - catch处理
- 在多重catch块后面,可以加一个catch (Exception)来处理可能会被遗漏的异常
- 对于不确定的代码,也可以加上try - catch,处理潜在的异常
- 尽量去处理异常,切忌只是简单地调用printStackTrace()去打印输出
- 具体如何处理异常,要根据不同的业务需求和异常类型去决定
- 尽量添加finally语句块去释放占用的资源(类似Scanner)