简单了解异常

异常(Exception):

异常体系:

在这里插入图片描述

异常: 继承 Throwable
exception 是所有异常类的父类
异常分为编译时异常,(文件未找到…) 和 运行时异常(算术异常,类型转换 …)

异常的基本用法:

1、捕获异常
try {  出现异常的语句;
} catch ( 异常类型 对象 ) {
出现异常的处理行为
} finally {
 善后工作
}

手动处理异常: 程序会继续往下执行,但try里的(异常)代码不执行
jvm处理异常:只要异常 程序中断

注意:

1、catch只能处理对应种类的异常
2、对于多个异常可以有多个catch
3、也可catch(异常类型 | 异常类型 |…对象)
4、捕获所有的异常(Exception) 不推荐
5、finally 一定会被执行且最后执行,表示善后工作,一般用于关闭资源
6、优先处理栈顶的异常

处理异常的流程:

(1)程序先执行 try 中的代码
(2)如果 try 中的代码出现异常, 就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配.
(3)如果找到匹配的异常类型, 就会执行 catch 中的代码
(4)如果没有找到匹配的异常类型, 就会将异常向上传递到上层调用者.
(5)无论是否找到匹配的异常类型, finally 中的代码都会被执行到(在该方法结束之前执行).
(6)如果上层调用者也没有处理的了异常, 就继续向上传递.
(7)一直到 main 方法也没有合适的代码处理异常, 就会交给 JVM 来进行处理, 此时程序就会异常终止

2、抛出异常

手动抛出异常,一般抛出为特定的异常(自定义的异常)
(1)throw new 异常类型
(2)throws 异常类型
一般放在方法的后面 即声明

3、finally注意事项

finally中不建议写return 语句;
因为:
(1)finally执行的时机是在方法返回之前
(2)若 (try 或者 catch 中如果有 return 会在这个 return 之前执行 finally).
(3)但是如果finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return (finally为抑制 try 和 catch 当中的 return)

4、自定义异常类

若要自定义异常,必须继承 Exception

例如 创建一个用户登录
处理登录的用户名错误 和密码错误的异常


public class Test {
    private static String userName = "admin";
    private static String password = "123456";
    static class UserError extends Exception {
        public UserError(String message) {
            super(message);
        }
    }
    static class PasswordError extends Exception {
        public PasswordError(String message) {
            super(message);
        }
    }
    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 (!Test.userName.equals(userName)) {
            throw new UserError("用户名错误");
        }
        if (!Test.password.equals(password)) {
            throw new PasswordError("密码错误");
        }
        System.out.println("登陆成功");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值