认识异常(Java)

1.异常的基本用法

2.Java异常体系

3.自定义异常类

1.异常的基本用法

捕获异常

基本语法如下:

   public static void main(String[] args) {
        try {
            //有可能出现异常的语句;
        } catch (/*异常类型 异常对象*/) {
            
        } finally {
            //异常的出口
        }

catch 只能处理对应种类的异常,catch也可以有多个。无论是否存在异常,finally中的代码一定会被执行到,主要用来释放资源,最后被执行,在finally块中,不建议使用return。如果本方法中没有合适的处理异常的方式, 就会沿着调用栈向上传递,如果向上一直传递都没有合适的方法处理异常, 最终就会交给 JVM 处理, 程序就会异常终止(和我们最开始
未使用 try catch 时是一样的)

异常说明:
我们在处理异常的时候, 通常希望知道这段代码中究竟会出现哪些可能的异常.我们可以使用 throws 关键字, 把可能抛出的异常显式的标注在方法定义的位置. 从而提醒调用者要注意捕获这些异常。

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

2.Java异常体系

  1. 顶层类 Throwable 派生出两个重要的子类, Error 和 Exception
  2. 其中 Error 指的是 Java 运行时内部错误和资源耗尽错误. 应用程序不抛出此类异常. 这种内部错误一旦出现,除了告知用户并使程序终止之外, 再无能无力. 这种情况很少出现.
  3. Exception 是我们程序猿所使用的异常类的父类.
  4. 其中 Exception 有一个子类称为 RuntimeException , 这里面又派生出很多我们常见的异常类NullPointerException,IndexOutOfBoundsException 等。

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

3.自定义异常类
代码示例:
实现一个简单的控制台版用户登陆程序, 程序启动提示用户输入用户名密码. 如果用户名密码出错, 使用自定义异常的方式来处理

    public class Test2 {

       private static String userName = "admin";
       private static String password = "123456";
       public static void main(String[] args) {
        try {
            login("admin", "123456");
        } catch (UserError userError) {
            userError.printStackTrace();
        } catch (PasswordError passwordError) {
            passwordError.printStackTrace();
        }
    }
    public static void login(String userName, String password) throws UserError,
            PasswordError {
        if (!Test2.userName.equals(userName)) {
            throw new UserError("用户名错误");
        }
        if (!Test2.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 或者 RuntimeException
继承自 Exception 的异常默认是受查异常
继承自 RuntimeException 的异常默认是非受查异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值