异常介绍:
在编写可能会抛出异常的方法时,它们都必须声明为有异常。
一、throws关键字
1.声明方法可能抛出的异常;
2.写在方法名后面;
3.可声明抛出多个异常,异常名使用逗号隔开;
4.调用者可以处理异常,也可以继续抛出,交由它的调用者处理。
有风险、会抛出异常的程序:
static void pop() throws NegativeArraySizeException { // 使用throws关键字,将异常向上传递,由调用者负责处理 int[] arr = new int[-3]; // 创建数组 }
调用该方法的程序:
public static void main(String[] args) { // 调用方法 try { pop(); // 调用pop()方法 } catch (NegativeArraySizeException e) { System.out.println("pop()方法抛出的异常"); // 输出异常信息 e.printStackTrace(); } }
二、throw关键字(用户自定义异常,需要通过throw关键字手动抛出)
1.生成并抛出异常;
2.在方法体内部;
3.只能抛出一个异常对象。
定义自己的异常类:
public class MyException extends Exception { //创建自定义异常,继承Exception类 private static final long serialVersionUID = 1L; public MyException(String ErrorMessage) { // 构造方法 super(ErrorMessage); // 父类构造方法 } }
异常发生时:
public class ThrowTest { public static void main(String[] args) { // 主方法 int age = 0; try { if (age < 18) // 判断年龄是否小于18岁 throw new MyException("未成年人不能进入"); // 手动抛出异常,这两行就相当于除数等于0,只是除数等于0时系统会自动抛出异常,此时需要先判断再决定是否手动抛出异常 } catch (MyException e) { e.printStackTrace(); } } }
注:如果在try语句块中有多句语句,在中间某句抛出异常后,try语句块中剩余的语句都不会执行,转而运行catch语句块。
finally语句块无论是否抛出异常都会执行,即使有在try和catch语句块中return语句也会先执行finally语句块。
三、异常处理规则:
1.catch和finally不能没有try;
2.try和catch之间不能有程序;
3.try一定要有catch或finally;
4.只带有finally的try必须要声明异常。