提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 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语言规范将除派生于 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,进行抛出,交给主函数进行处理。