什么是异常
本质上是程序上的错误
- 编译期间的错误
- 运行期间的错误
如何处理异常
try-catch-finally
throw
throws
- 自定义异常
- 异常链
Throwable类
通过Throwable类
以及他的一些子类对程序中的错误进行的描述
主要有2个重要的子类
- Error:
- Exception
其中Exception
又很多的子类,常见的如下:
- 算术异常:
ArithmeticException
- 输入格式异常:
InputMismatchException
异常的基础知识点:
try-catch-finally
try:抛出异常,通常放执行代码
catch:捕获异常,异常api官方文档
finally:这个代码块的内容一定会执行且不受try-catch的影响
try块可以接0个或多个catch块,如果try后面没有接catch块,那么必须接一个finally块
多个catch
块连用的时候需要注意以下几点:
- 捕获
Exception
异常的catch块必须放到最后,因为Execption
可以捕捉所有类型的异常 - 多个
catch
块捕捉的异常类型不能相同
finally
块注意事项:
- 最好不要在
finally
块里面放return
语句,因为finally
块的执行优先级是大于try-catch
里面的return
语句的,一旦finally
块有return
语句,会直接在finally
块结束程序,而不会跳到try-catch
块
throw
- 用来抛出一个异常,如
throw new IOException()
- 抛出的只能是可抛出类
Throwable
或其他子类的实例对象
throw
抛出异常对象的解决方案
- 通过
try-catch
包含throw
语句,自己抛出自己处理 - 通过
throws
在方法中声明抛出类型,谁调用谁处理,调用者可以自己处理也可以向上抛,此时可以抛throw
对象相同的类型或其父类
package com.sinmu.ExceptionTest;
import java.util.Scanner;
public class TryDemoTwo {
public static void main(String[] args) {
test();
try {
test1();
} catch (Exception e) {
e.printStackTrace();
}
}
//需求: 年龄小于18或大于80的需要在亲人配套下入住
public static void test(){
System.out.println("输入年龄:");
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
if (age < 18 || age > 80){
try {
throw new Exception("年龄小于18或大于80的需要在亲人配套下入住");
} catch (Exception e) {
e.printStackTrace();
}
}else {
System.out.println("入住成功");
}
}
public static void test1() throws Exception {
System.out.println("输入年龄:");
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
if (age < 18 || age > 80){
throw new Exception("年龄小于18或大于80的需要在亲人配套下入住");
}else {
System.out.println("入住成功");
}
}
}