Java异常
异常简单分类
-
三种类型异常
- 检查性异常
- 运行异常
- 错误
-
Java将异常当做类来处理,并定义了一个java.lang.Throwable作为所有异常的超类,异常类主要分为Error和Exception两大类
捕获和抛出异常
-
抛出异常
-
捕获异常
-
异常处理五个关键字try、catch、finally、throw、throws
- try: 监控异常, try出现在方法体中,它自身是一个代码块,表示尝试执行代码块的语句。如果在执行过程中有某条语句抛出异常,那么代码块后面的语句将不被执行。
- catch:捕获异常, catch出现在try代码块的后面,自身也是一个代码块,用于捕获异常try代码块中可能抛出的异常。catch关键字后面紧接着它能捕获的异常类型,所有异常类型的子类异常也能被捕获。 可以多次使用,但要异常类型从小到大写,将最大的异常类型放到后面。异常类型由大到小为Throwable->Error或 Exception_>......
- finally:处理善后,不管是否捕获到异常均会执行,可以不使用,一般在IO中发生异常后关闭资源
- throw:主动抛出异常, throw出现在方法体中,用于抛出异常。当方法在执行过程中遇到异常情况时,将异常信息封装为异常对象,然后throw。
- throws: throws出现在方法的声明中,表示该方法可能会抛出的异常,允许throws后面跟着多个异常类型
-
IDEA抛出异常快捷键
? 选中可能出现异常的代码->ctrl+alt+T
- try-catch-finally
public class Test {
public static void main(String[] args) {
int a=10;
int b=0;
try{//try监控区域
System.out.println(a/b);
}catch(ArithmeticException e){//catch捕获异常
System.out.println("除法分母不能为0");
}catch(Exception e){
System.out.println("除法分母不能为0");
}finally{//处理善后工作
System.out.println("finally");
}
}
}
- throw
package com.yang;
public class Test {
public static void main(String[] args) {
new Test().test(1,0);
}
public void test(int a,int b){
if (b==0){//当出现异常时,使用throw主动抛出异常
throw new ArithmeticException();
}
}
}
结果:
Exception in thread "main" java.lang.ArithmeticException
at com.yang.Test.test(Test.java:9)
at com.yang.Test.main(Test.java:4)
- throws
package com.yang;
public class Test {
public static void main(String[] args) {
try {
new Test().test(1,0);
} catch (ArithmeticException e) {//继续使用try-catch处理throws抛出的异常
e.printStackTrace();
} finally {
}
}
public void test(int a,int b) throws ArithmeticException{//假设这个方法处理不了异常,使用throws方法抛出异常
if (b==0){
throw new ArithmeticException();
}
}
}
自定义异常
- 用户自定义异常只需要继承Exception类即可
- 自定义异常大体分为以下几步
- 创建自定义异常类
- 在方法中通过throw关键字抛出异常对象
- 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作
- 在出现异常方法的调用者中捕获并处理异常