Java(15):异常
异常
error错误由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。Exception是可以被程序处理的,并且程序应该尽可能去处理这些异常。
五个关键字:
try、catch、finall、throw、throws。
public class Application{
public static void main(String[] args) {
int a = 1;
int b = 0;
try {
int c = a / b;
}catch (Exception e){
System.out.println(e);
}finally {
// finally 可以不要
System.out.println("不管怎么样都会执行我");
}
}
}
可以写多个catch语句来捕获不同的异常,得注意异常程度必须由低到高(见最上面的示意图):
public class Application{
public static void main(String[] args) {
int a = 1;
int b = 0;
try {
int c = a / b;
}catch (Error r){ // 多个异常捕获必须由低到高
System.out.println("Error");
}catch (Exception e){
System.out.println("Exception");
}catch (Throwable t){
System.out.println("Throwable");
} finally {
// finally 可以不要
System.out.println("不管怎么样都会执行我");
}
}
}
最后的执行结果是打印出“Exception”。
idea中选中代码、CTRL+ALT+T快捷生成异常代码。
主动抛出异常。
throw一般用在方法中抛出异常。然后就可以用try-catch捕获异常,如果在当前代码中不方便使用try-catch捕获异常,那么可以在方法上用throws抛出异常,让其他地方try-catch捕获异常。
if (b == 0){
throw new Exception(); // 主动抛出异常
}
int c = a / b;
异常假设方法中处理不了这个异常,throws用在方法上抛出异常:
public class Application{
public static void main(String[] args) {
int a = 1;
int b = 0;
new Application().test(a, b);
}
public void test(int a, int b) throws ArithmeticException{ // 方法上throws
if (b == 0){
throw new ArithmeticException(); // 主动抛出异常
}
System.out.println(a/b);
}
}
自定义异常
使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。只需要继承Exception类即可。
大体有以下几个步骤:
- 创建自定义异常类。
- 在方法中通过throw关键字抛出异常对象。
- 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
- 在出现异常方法的调用者中捕获并处理异常。
。。。。