Java异常

Java异常

一.什么是异常

  • 在Java程序运行时,常常会出现一些非正常的现象,这种情况称为运行错误,根据性质分为可以分为错误异常。Java程序中(无论是谁写的代码),所有抛出(throw)的异常都必须从Throwable有俩个直接子类Error和Exception
  • Java异常对应的类为Exception类Exception类对象是Java程序处理或抛弃的对象,它有各种不同的子类分别对应于不同类型的异常。Java编译器要求程序必须捕获或声明所有的非运行时异常,但对运行时异常可以不做处理。其中类RuntimeException代表运行时由Java虚拟机生成的异常,原因是编程错误。其他则为非运行时异常,原因是程序碰到了意外情况,如输入/输出异常IOException等。

二.异常关键字

1.五个异常处理的关键语句

  • try,catch,throw,throws,finally

2.try,catch,finally三个语句块注意的问题

  • (1)try,catch,finally三个语句块不能单独使用,三者可以组成:try…catch…finally ; try…catch ;try…finally三种结果,catch可以有一个或者多个finally语句最多一个
  • (2)try,catch,finally三个代码中变量的作用域为代码块内部,分别独立而且不能相互访问,如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
  • (3)若有多个catch块只会匹配其中一个异常类并执行catch块代码,而不会再执行其他的catch块,并且匹配catch语句单独顺序是由上到下。

3.throw和throws关键字区别

(1)throw关键字
  • throw关键字用于方法体内部,用来抛出一个Throwable类型的异常。如果抛出了检查异常,则还应该在头部声明方法可能抛出的异常类型。该方法的调用者也必须检查处理抛出的异常。如果所有的方法都层层上抛获取的异常,最终JVM会进行处理,处理也很简单,就是打印异常消息和堆栈信息。如果抛出的是Error 或 RuntimeException,则该方法的调用者可选择处理该异常。
(2)throws关键字
  • throws关键字用于方法体外部的方法声明部分,用来声明方法可能会抛出某些异常。仅当抛出了检查异常,该方法的调用者才必须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,而不是囫囵吞枣般地在catch块中打印堆栈信息来做处理。

4.finally关键字

  • finally 关键字是对Java异常处理模型的最佳补充。finally 结构使代码总会执行,而不管有无异常发生。使用finally可以维护对象的内部状态,并可以清理非内存资源。如果没有finally,你的代码就会很费解

三.异常的完整性

  • 在Java语言中,如果一个函数运行时可能会向上层调用者函数抛出一个异常,那么,它就必须在该函数的声明中显式地注明(采用throws关键字)。否则编译器会报出错误信息:“must be caught or declared to be thrown”。其中“must be caught"指在Java的异常处理模型中,要求所有被抛出的异常都必须有对应的“异常处理模块”。如果你在程序中利用throw出现一个异常,那么在你的程序(函数中)就必须要用catch处理这个异常。例如下面的例子中,抛出了一个Exception类型的异常,所以在该函数中,就必须有一个catch,并处理此异常。如果没有这个catch,Java语言在编译时就直接拦住这种可能出现错误的情况,不让程序通过。
try{
     
	......
	//throw Exception
}catch(Exception e){
     
	//find Exception
	//hand of it
}
  • “declared to be thrown”指的是“必须显式地声明某个函数可能会向外部抛出一个异常”,也即是说,如果一个函数内部,它可能抛出了一种类型的异常,但该函数内部又不想用catch处理这种类型的异常,此时,它就必须(强制性的)使用throws关键字来显式地声明该函数可能会向外部抛出一个异常,以便该函数的调用者知晓并能够及时处理这种类型的异常。

你可能感兴趣的:(Java基础知识和回顾,java,exception)