JAVA的异常处理的语句为:try-catch-finally,在这个语句中catch语句可以有一个或多个,finally语句可以省略.但是 try语句后至少要有一个catch语句或finally语句.JAVA异常处理机制只能处理Throwable类或其子类对象,所以自定义异常类层次需要选取Throwable类或其某个子类作为父类。
JAVA异常处理大致可以分为两类:
JAVA对不同的异常类采取不同的处理策略。
类别
处理方式
Error及其子类
Error意味着是很难恢复的严重错误,一般不由程序处理
继承Exception的RuntimeException
RuntimeException意味着程序设计或实现问题,例如数组使用越界,算术运算异常(例如除0运算),空指针异常(即访问没有初始化的指针)等.正确设计与实现的程序不应该产生这些异常,处理的策略是纠正错误.注意:RuntimeException异常不是必须被catch,即使Throw了也不必catch.
其他继承Exception类
其他的异常通常是由环境因素引起的,如文件不存在,无效URL等.这类是由用户的误操作引起的,可以在异常处理中处理,例如,提示用户进行正确操作.
注意:这里再来说说 Error,Exception以及RuntimeException的区别.
Error 表示非常严重的、不可预期的异常情况,通常应用程序无需捕获并处理。
除RuntimeException外的Exception通常是一种设计或实现的异常,它是编译器可以“感知”的异常,所以程序被要求必须捕获并处理这些异常。
RuntimeException与Error一样,也是无需捕获的,且就算在方法上throws了RuntimeException,调用该方法的语句也无需catch这些异常。
就是说在声明语句returnType methodName([paramlist])throws exceptionlist中声明的异常,Exception一定要被处理,而RuntimeException异常则可以不被处理.
是否需要捕捉,就一句话,是否被编译器感知。是否需要捕捉,就一句话,是否被编译器感知。是否需要捕捉,就一句话,是否被编译器感知。
例子 :
import java.io.*;
import java.util.*;
class B{
void s()throws RuntimeException{
throw new RuntimeException();
}
}
public class M{
public static void main(String args[])
{
B b=new B();
try
{
b.s();
}
finally
{
System.out.print(" here2");
}
}
}
能产生结果 here2Exception in thread "main" java.lang.RuntimeException
at B.s(M.java:6)
at M.main(M.java:18)
import java.io.*;
import java.util.*;
class B{
void s()throws Exception{
throw new Exception();
}
}
public class M{
public static void main(String args[])
{
B b=new B();
try
{
b.s();
}
finally
{
System.out.print(" here2");
}
}
}
编译时则会报错 M.java:18: 未报告的异常 java.lang.Exception;必须对其进行捕捉或声明以便抛出
b.s();
^
1 错误