异常处理
一、Error和Exception
- Error:是灾难性的致命错误,程序无法控制和处理的
- Exception:可以被程序处理,并且在程序中应该尽可能去处理异常
二、捕获和抛出异常
-
idea快捷键:ctrl+alt+t
-
捕获异常:try…catch…finally
//捕获异常:try...catch...finally try { System.out.println(11/0); //0不能被除,报ArithmeticException异常 }catch (Exception e){ //catch(异常类型) System.out.println("程序出现异常会执行catch"); e.printStackTrace(); //打印异常信息 }finally { System.out.println("无论是否出现异常都会执行finally"); }
-
抛出异常:throw
public static void run(int a, int b) { if (b == 0) { throw new ArithmeticException();//主动抛出异常:throw,一般在方法中使用 } System.out.println(11 / 0); }
-
抛出异常:throws
//方法中处理不了的异常,用throws抛出异常 public static void run2(int a, int b) throws ArithmeticException { if (b == 0) { throw new ArithmeticException();//主动抛出异常:throw } System.out.println(11 / 0); }
三、自定义异常
//自定义异常类,继承Exception类
public class MyException extends Exception{
//传递参数>10
private int n;
//构造器
public MyException(int n) {
this.n = n;
}
//打印异常:重写toString方法
@Override
public String toString() {
return "MyException{" + "n=" + n + '}';
}
}
public class Demo2 {
public static void main(String[] args) {
//调用方法时捕获异常处理
try {
test(10); //正常
test(11); //异常
} catch (MyException e) {
e.printStackTrace();
}
}
//方法中抛出自定义的异常
public static void test(int n) throws MyException {
System.out.println("传递的参数为"+n);
if (n>10){
throw new MyException(n);
}
}
}