提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


文章目录

  • 1.抛出异常
  • throw
  • throws
  • 2.异常体系
  • 受查异常
  • 非受查异常
  • 3.自定义异常类
  • 简单实例



1.抛出异常

throw

可以手动抛出某个异常. 使用 throw 关键字完成这个操作,我们在处理异常的时候, 通常希望知道这段代码中究竟会出现哪些可能的异常.
我们可以使用 throws 关键字, 把可能抛出的异常显式的标注在方法定义的位置. 从而提醒调用者要注意

public static void main(String[] args) {
        System.out.println(divide(10, 0));
    }
    public static int divide(int x, int y) {
        if (y == 0) {
            throw new ArithmeticException("抛出除 0 异常");
        }
        return x / y;
    }

throws

自己实现某个方法时,也就必须明确的知道当前这个方法可能会抛出那些异常,此时就可以通过throws来提醒方法的调用者要小心处理这些异常。

public static int divide(int x, int y) throws ArithmeticException {
        if (y == 0) {
            throw new ArithmeticException("抛出除 0 异常");
        }
        return x / y;
    }

2.异常体系

java自定义错误码抛出 java自定义抛出异常_java自定义错误码抛出

受查异常

Java语言规范将派生于 Error 类或 RuntimeException 类的所有异常称受查异常

如果某个方法中抛出了这个异常,那么就必须对这个异常进行显式的处理(显式处理包括两种方案,1.直接try catch 2.使用throws声明可能会抛出这个异常)

非受查异常

Java语言规范将派生于 Error 类或 RuntimeException 类的所有异常称为 非受查异常,

对于非受查异常我们也无能为力,没有办法处理。

3.自定义异常类

Java 中虽然已经内置了丰富的异常类, 但是我们实际场景中可能还有一些情况需要我们对异常类进行扩展, 创建符合我们实际情况的异常

简单实例

我们实现一个用户登陆功能

public class Test {
    private static String userName="admin";
    private static String password="123456";

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String sn=scanner.next();
        System.out.println("请输入密码:");
        String sp=scanner.next();
        try {
            login(sn,sp);
        } catch (UserError | PasswordError e) {
            e.printStackTrace();
        }
    }
    public static void login(String userName, String password) throws UserError,
            PasswordError {
        if (!Test.userName.equals(userName)) {
            throw new UserError("用户名错误");
        }
        if (!Test.password.equals(password)) {
            throw new PasswordError("密码错误");
        }
        System.out.println("登陆成功");
    }
}
class UserError extends Exception {
    public UserError(String message) {
        super(message);
    }
}
class PasswordError extends Exception {
    public PasswordError(String message) {
        super(message);
    }
}

继承父类的时候,父类是什么异常,自己就是什么异常,比如现在的Exception就是受查异常,就必须显式处理,可以看到上述login函数中的throws,进行抛出,交给主函数进行处理。

java自定义错误码抛出 java自定义抛出异常_受查异常_02