Java异常学习

如图所示,在JAVA中所有的异常都是继承了Throwable

  Error: 错误 .class 文件在JVM上解释运行, 如果咱们写的代码把JVM 搞塌了, 会产生Error, 只有改代码才能解决
          StackOverflowError 栈溢出
           堆溢出Error
 Exception:
            RuntimeException: 在运行时才会出现的异常, 在遇到异常之前, 都能正常运行, javac 在编译的时候, 不会出问题

          非RuntimeException:
          IOException, FileNotFoundException : 编译期异常

在Java中 万事万物皆是对象
异常也是一个引用数据类型 -> 类和对象
异常类: jdk中预设
异常对象: 代码出现错误的时候产生的

 产生异常对象之后: 对其进行处理

一、 捕获: try-catch-finally
1. finally 可以不写, 写了之后一定会执行. 不管是有没有发生异常,都会执行,也不管前面是什么代码, 包括return 语句。
2. catch 可以抓住多个异常, 并列关系.
一般有两种处理方式:
                                       (1) e.printStackTrace();
                                        (2)System.out.println(e.getMessage());

 如果多个异常之间没有关系, 并列, 则顺序无所谓,
catch (NullPointerException | ArrayIndexOutOfBoundsException e )
表示这一层多个异常都是这一种处理方式
注意!:如果多个异常有父子关系, 父类要子类的下面.
3. try {} 里边的变量的作用域只能是try里边, catch和finally都访问不到
 4. try-catch-finally每一个结构中的代码块都可以嵌套 try-catch-finally

  二、 声明:
throws 声明抛出,将自己不想处理的异常告诉调用者, 让调用者来处理
throw 人为的告诉JVM这有一错误
hrow 后面跟一个对象, 就表明这会出一个问题(抛出一个异常对象)
throw抛出的异常对象可以当场处理(但没必要)
throw如果抛出的是一个RuntimeException就可以不进行任何操作
throw 如果抛出的是一个非RuntimeException, 则必须要么处理, 要么就是抛出(在方法上进行声明)

 三. 捕获和声明用处:
1. 如果本方法是一个最终的方法(main) 就进行处理
 2. 如果调用方法(调用本方法的方法) 已经有一个声明了
 3. 如果当前方法想要处理, 自己就办了.

  四、 异常声明在方法重写中的应用
  重写的方法的声明异常类 不大于 被重写的方法

五、 自定义异常
 比如: 在登录的时候, 有一个用户名不存在的异常
 throw new UsernameNotFoundException();
       1. 明确自己要自定义的异常是什么样的异常,
                         (1)Runtime的异常 extends RuntimeException
                         (2) 非Runtime的异常 extends Exception

        2. 写构造方法, 空参的, 有参的(message)
        3. 使用时, 与系统预设的使用方式相同

public class UsernameNotFoundException extends Exception{


    static final long serialVersionUID = -338751691234229948L;


    private static final String ERROR_MESSAGE = "用户名未找到";

    public UsernameNotFoundException() {
        this(ERROR_MESSAGE);
    }

    public UsernameNotFoundException(String message) {
        super(message);
    }

    public UsernameNotFoundException(String message, Throwable cause) {
        super(message, cause);
    }

    public UsernameNotFoundException(Throwable cause) {
        super(cause);
    }

    public UsernameNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

小白学习笔记 欢迎指导和补充 谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值