Java_异常类(错误和异常,两者的区别介绍)
在 Java 中,所有的异常都有⼀个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可⽤异常传播机制通过 Java 应⽤程序传输的任何问题的共性。
Throwable 有两个重要的⼦类:Exception(异常)和 Error(错误),⼆者都是 Java 异常处理的重要⼦类,各⾃都包含⼤量⼦类。
①.Exception(异常)是应⽤程序中可能的可预测、可恢复问题。⼀般⼤多数异常表⽰中度到轻度的问题。异常⼀般是在特定环境下产⽣的,通常出现在代码的特定⽅法和操作中。在 EchoInput 类中,当试图调⽤ readLine ⽅法时,可能出现IOException 异常。
Exception 类有⼀个重要的⼦类 RuntimeException。RuntimeException 类及其⼦类表⽰“JVM 常⽤操作”引发的错误。例如,若试图使⽤空值对象引⽤、除数为零或数组越界,则分别引发运⾏时异常(NullPointerException、ArithmeticException)和ArrayIndexOutOfBoundException。
②.Error(错误)表⽰运⾏应⽤程序中较严重问题。⼤多数错误与代码编写者执⾏的操作⽆关,⽽表⽰代码运⾏时 JVM(Java 虚拟机)出现的问题。例如,当 JVM 不再有继续执⾏操作所需的内存资源时,将出现 OutOfMemoryError。
检查异常和未检查异常的划分
Java中的异常分为两⼤类:
1.Checked Exception(⾮Runtime Exception)
2.Unchecked Exception(Runtime Exception)
nullpointerexception为什么异常运⾏时异常
RuntimeException类是Exception类的⼦类,它叫做运⾏时异常,Java中的所有运⾏时异常都会直接或者间接地继承⾃RuntimeException类。
Java中凡是继承⾃Exception,⽽不继承⾃RuntimeException类的异常都是⾮运⾏时异常。
⼀个try后⾯可以跟多个catch,但不管多少个,最多只会有⼀个catch块被执⾏。
对于⾮运⾏时异常(checked exception),必须要对其进⾏处理,否则⽆法通过编译。
处理⽅式有两种:
1.使⽤atch..finally进⾏捕获;
2.在产⽣异常的⽅法声明后⾯写上throws 某⼀个Exception类型,如throws Exception,将异常抛出到外⾯⼀层去。
对于运⾏时异常(runtime exception),可以对其进⾏处理,也可以不处理。推荐不对运⾏时异常进⾏处理。
扩展:错误和异常的区别(Error vs Exception)
1).java.lang.Error: Throwable的⼦类,⽤于标记严重错误。合理的应⽤程序不应该去try/catch这种错误。绝⼤多数的错误都是⾮正常的,就根本不该出现的。
java.lang.Exception: Throwable的⼦类,⽤于指⽰⼀种合理的程序想去catch的条件。即它仅仅是⼀种程序运⾏条件,⽽⾮严重错误,并且⿎励⽤户程序去catch它。
2).Error和RuntimeException 及其⼦类都是未检查的异常(unchecked exceptions),⽽所有其他的Exception类都是检查了的异常(checked exceptions).
checked exceptions: 通常是从⼀个可以恢复的程序中抛出来的,并且最好能够从这种异常中使⽤程序恢复。⽐如FileNotFoundException, ParseException等。检查了的异常发⽣在编译阶段,必须要使⽤try…catch(或者throws)否则编译不通过。
unchecked exceptions: 通常是如果⼀切正常的话本不该发⽣的异常,但是的确发⽣了。发⽣在运⾏期,具有不确定性,主要是由于程序的逻辑问题所引起的。⽐如ArrayIndexOutOfBoundException, ClassCastException等。从语⾔本⾝的⾓度讲,程序不该去catch这类异常,虽然能够从诸如RuntimeException这样的异常中catch并恢复,但是并不⿎励终端程序员这么做,因为完全没要必要。因为这类错误本⾝就是bug,应该被修复,出现此类错误时程序就应该⽴即停⽌执⾏。因此,⾯对Errors和unchecked exceptions应该让程序⾃动终⽌执⾏,程序员不该做诸如try/catch这样的事情,⽽是应该查明原因,修改代码逻辑。
RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。
处理RuntimeException的原则是:如果出现 RuntimeException,那么⼀定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。其他(IOException等等)checked异常⼀般是外部错误,例如试图从⽂件尾后读取数据等,这并不是程序本⾝的错误,⽽是在应⽤环境中出现的外部错误。
以上这篇Java_异常类(错误和异常,两者的区别介绍) 就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。