在Java编程中,出现程序异常的情况很常见,可能是编译时就出现了异常,也可能是程序运行时才出现异常,出现异常不一定都是坏事,异常也是可以被利用的。
1.Java异常的关键字与作用
try关键字:
首先try肯定会配合{}一起使用,我们这一部分称之为try语句块。
当你的代码有可能发生异常时,需要使用try语句块;将这些代码写入到try语
句块后,那么只要有异常发生,try就会捕获这些异常。
catch关键字:
catch会配合(**Exception 对象名){}一起使用,这就是catch语句块。
catch语句块会根据try语句块捕获异常,决定交给不同的catch语句块进行
处理。
finally关键字:
finally关键字会配合{}一起使用,这就是finally语句块
finally语句块不管是否发生异常都会执行的语句块。
finally语句块一般是用来执行对象或者资源的释放。
try、catch、finally的使用格式:
try {
……
} catch (XXXXXXException e) {
……
}
Finally{
……
}
throw关键字:
throw关键字一般配合new关键字来使用,用来抛出你新建的异常对象信息。
throw抛出的异常需要使用throws或者try{}catch(){}来进行处理。
Throw的使用格式:
例如定义一个除数为零的异常:
a/b;
If(b=0){
throw new MyException("除数不能是负数");
}
throws关键字:
throws关键字的作用就是当方法中发生异常,而又不想在方法中进行处理时,
会使用throws关键字把异常往外抛出,这样调用这个方法的地方就必须要使用
throws或者try{}catch(){}进行处理。
Throws的使用格式:
throws关键字在方法结束圆括号后使用,throws后边又会跟上**Exception
method() throws **Exception {}
3.Java异常的体系
Throwable类是 Java 语言中所有错误或异常的超类。其中包括了两个子类:
(1)Error类(错误)是Throwable的子类,用于标记严重错误。合理的应用程序不 应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的,应该查明原因,修改代码逻辑。
例如:
StackOverflowError 堆栈溢出
IOError IO错误
(2)Exception类(异常)是Throwable的一种形式的子类,用于指示一种合理的程 序想去catch的条件。即它仅仅是一种程序运行条件,而非严重错误,并且鼓励用 户程序去catch它。
例如:
(1)RuntimeException运行时异常,是未检查的异常(unchecked exceptions),是如果一切正常的话本不该发生的异常,但是的确发生了。从语言本身的角度讲,程序不该去catch这类异常,虽然能够从RuntimeException这样的异常中catch并恢复,但是并不鼓励终端程序员这么做,因为完全没要必要。因为这类错误本身就是bug,应该被修复,出现此类错误时程序就应该立即停止执行。 因此,面对unchecked exceptions应该让程序自动终止执行,程序员不该做诸如try/catch这样的事情,而是应该查明原因,修改代码逻辑。
NullPrintException 空指针异常
ArrayIndexOutOfBoundsException 数组下标越界异常
ClassCastException 类型转换异常
IllegalArgumentException 非法的参数异常
(2) checked exception是已被检查出的异常,是JAVA 编译器强制要求我们必需对出现的这些异常进行 catch 。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆 catch 块去处理可能的异常。通常是从一个可以恢复的程序中抛出来的,并且最好能够从这种异常中使用程序恢复。
例如:
InterruptedException 线程休眠时的异常
IOException I/O操作生成的异常
EOFException 输入过程中意外到达文件或流的末尾时的异常
FileNotFoundException 打开指定路径名表示的文件失败时的异常
SocketException 底层协议中存在错误时的异常
4.java中处理异常的作用
(1)异常提供了从错误状态进行可靠恢复的途径,而不需要退出程序。
(2) Exception可以用来传递消息,并不仅仅是错误让自己解决了就行,需要让外界知道并把处理权交给外界的调用者。