一:基本概念
当程序中出现了某些“错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息。
二:自定义异常的步骤
- 定义类:自定义异常类名(程序员自己写)继承Exception或RuntimeException
- 如果继承类Exception,属于编译异常
如果继承RuntimeException,属于运行异常(一般来说,继承RuntimeException)
三:自定义异常的应用实例
当我们接收Person对象年龄时,要求范围在18-120之间,否则抛出一个自定义异常(要求继承RuntimeException),并给出提示信息。 ```java public class Test2 { public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int Age = scanner.nextInt();
if (!(Age >=18 && Age <=120)){
throw new Person("年龄需要在18-20之间");
}
System.out.println("年龄范围正确");
} } //自定义异常 //1. 一般情况下,我们自定义异常是继承 RuntimeException //2. 即把自定义异常做成 运行时异常,好处时,我们可以使用默认的处理机制 class Person extends RuntimeException{ public Person(String message) {
super(message);
} }
<a name="CUX8A"></a>
### 四:throw和throws区别
![image.png](https://cdn.nlark.com/yuque/0/2022/png/2595924/1661230697019-efb4d58f-b836-4033-b5a4-8e4896beba4a.png#clientId=uf2f01f41-a37b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=252&id=ue2cc8c72&margin=%5Bobject%20Object%5D&name=image.png&originHeight=252&originWidth=1126&originalType=binary&ratio=1&rotation=0&showTitle=false&size=115422&status=done&style=none&taskId=ub9819055-0100-4c2a-a5b3-b5953ae36ff&title=&width=1126)
<a name="sQlfy"></a>
### 五:练习
![image.png](https://cdn.nlark.com/yuque/0/2022/png/2595924/1661230612894-765c2549-1029-4501-978a-2e5a691005df.png#clientId=uf2f01f41-a37b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=589&id=ub0ba2853&margin=%5Bobject%20Object%5D&name=image.png&originHeight=589&originWidth=1415&originalType=binary&ratio=1&rotation=0&showTitle=false&size=544624&status=done&style=none&taskId=u4841c4ad-2b6e-4776-8e85-c4cdfa477a7&title=&width=1415)
:::info
**_分层处理异常思想_**
:::
```java
public class Test1 {
public static void main(String[] args) {
try {
//先验证传入的个数
if(args.length !=2){
throw new ArrayIndexOutOfBoundsException("参数个数不对");
}
//再验证是否为整数
double n1 = Integer.parseInt(args[0]);
double n2 = Integer.parseInt(args[1]);
//再验证算数异常
double result = Cal(n1,n2);
System.out.println("计算结果为:"+ result);
}catch (ArrayIndexOutOfBoundsException e) {
System.out.println(e.getMessage());
}catch (NumberFormatException e){
System.out.println("参数格式不正确");
}catch (ArithmeticException e){
System.out.println("算数异常");
}
}
public static double Cal(double n1 ,double n2){
return n1 / n2;
}
}
:::info
抛出异常之后,后面的代码块不在执行
如果有 throw或者return finally才会优先输出
:::