为了账号安全,请及时绑定邮箱和手机立即绑定

Exception和Error

标签:
Java

Throwable

ThrowableExceptionerror的父类。而Exceptionerror的作用不同,这里的两个不同的子类体现的是异常中分类的思想。

图片描述

如上图所示,ExceptionError的分类依据是对于会出现问题带代码我们是否应该捕获。

应该捕获(Exception)

对于Exception我们是应该捕获的,不过Exception中也可以进行分类,分类的一句是是否能检查,也就是该异常是在编译器就知道还是在运行时才能知道。

checked

对于在编译期就可以知道的异常就是可检查的异常,比如ClassNotFoundException

unchecked

对于在编译期不知道,在运行时可能会出现的异常就是运行时异常,比如

  • NullPointerException
  • ArrayIndexOutOfBoundException
  • ClassCastException

不能捕获(Error)

对于有些错误出现了我们是不能处理的,很多都是jvm虚拟机自身出了问题,对于这样的问题即使我们能捕获也是处理不了的,所以这些不可捕获的类别就通过Error来定义。比如说下面的几个错误

  • OutOfMemoryError
  • StackOverFlowError
  • NoClassDefFoundError

throw和throws

package example;

public class TestThrow {
    public static void main(String[] args) {
        one();
    }
    public static void one() throws ArithmeticException{
        try {
            int i = 1 / 0;
        } catch (ArithmeticException e) {
            throw new ArithmeticException("by / zero");
        }
    }
}

Throw

  • 作用在方法内,表示抛出具体异常,由方法体内的语句处理。
  • 具体向外抛出的动作,所以它抛出的是一个异常实体类。若执行了Throw一定是抛出了某种异常。

Throws

  • 作用在方法的声明上,表示如果抛出异常,则由该方法的调用者来进行异常处理。
  • 主要的声明这个方法会抛出会抛出某种类型的异常,让它的使用者知道捕获异常的类型。出现异常是一种可能性,但不一定会发生异常。

ClassNotFoundException和NoClassDefFoundError

  • 对于ClassNotFoundException是一个检查异常,比如下面的代码
package example.classobject;
import org.junit.Test;
public class ClassObject {
    @Test
    public void testException () throws ClassNotFoundException {
        Class.forName("oracle.jdbc.driver.OracleDriver");
    }
}

上面的代码去加载mysql数据库驱动,如果没有加载到就会出现类没有找到的异常

  • NoClassDefFoundErrorError,这里说明是可以代码可以通过编译,但是实际运行的是在发现找不到编译后的class就会出现这个错误.
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
0
获赞与收藏
0

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消