JAVA-基础 -异常

Java中的异常分为Error和Exception,Error表示严重问题,导致程序终止,如OutOfMemoryError;Exception是可恢复的,分为检查异常(编译器强制处理,如IOException)和运行时异常(RuntimeException,如NullPointerException),运行时异常未处理会导致程序退出。Java程序员应理解并适当地处理这些异常。
摘要由CSDN通过智能技术生成

        java把异常当做一个对象来处理,并定义了一个基类(java.lang.Throwable)作为所有异常得父类。在Java API中,已经定义了许多异常类,这些异常类分为Error(错误),和Exception(异常)两大类,如下图所示。

Error错误

        Error表示程序在运行期间出现了非常严重的错误,并且该错误是不可恢复得,由于这属于JVM层次得严重错误,因此这种错误是会导致程序终止执行得。此外,编译器不会检查Error是否被处理,因此在程序中是不推荐去不获Error类型得异常,主要原因是运行时异常多是由于逻辑错误导致的,属于应该解决的错误,也就是说,一个正确的程序中是不应该存在Error得。OutOfMemoryError,ThreadDeath等都属于错误。当这些异常发生时,JVM一般会选择将线程终止。

OutOfMemoryError 参考https://blog.csdn.net/nisen6477/article/details/100018801

Exception 检查异常

所有继承自Exception并且不是运行时异常得异常都是检查异常。比如常见的IO异常和SQL异常。这种异常都发生在编译阶段,Java编译器强制程序去捕获此类型的异常,即把可能会出现这些异常得代码放到try块中,把对异常得处理得代码放到catch块中,这种一场一般都在如下几种情况中使用:

        (1)异常的发生并不会导致程序出错,进行处理后可以继续执行后续的操作,例如:当连接数据库失败后,可以重新链接后进行后续操作。

        (2)程序依赖于不可靠的外部条件,例如系统IO

RuntimeException 运行时异常

        编译器没有强制对其进行捕获处理,如果不对这种异常进行处理,当出现这种异常时,会由JVM来处理,。运行时异常包括:NullPointerExceptiion,ClassCastException,ArrayIndexOutBoundsException,ArrayStoreException,BufferOverflowException,ArithmeticException等。

        出现运行时异常后,系统会把异常一直往上层抛出,直到遇到处理代码为止。若没有处理代码块,则跑到最上层,如果是多线程就用Thread.run()方法抛出,如果是单线程,则用main()方法抛出。抛出后,如果是线程,那么这个线程也就推出了,如果是主程序抛出的异常,那么整个程序都退出了。所以如果不对运行时异常进行处理,后果是非常严重的,如果一旦发生了,要没事线程中止,要么是主程序终止。

还可以通过根据Javac对异常的处理要求,将异常类分为2类。

非检查异常(unckecked exception):

        Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。所以如果愿意,我们可以编写代码处理(使用try...catch...finally)这样的异常,也可以不处理。对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。

检查异常(checked exception):

        除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作(使用try...catch...finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。如SQLException , IOException,ClassNotFoundException 等。

        最后看一下异常得结构图

参考:https://www.cnblogs.com/lulipro/p/7504267.html  Java程序员面试笔试宝典

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值