这里暂不介绍Java异常的分类,主要介绍如何处理异常:
Java中处理异常一般有两种方式:1,使用trycatch块捕获处理异常;2,使用throws声明异常。
Java中的异常处理原则:如果是需要将异常信息发送给系统调用者或者是无法再本方法中处理异常,则声明异常。
尽可能去处理异常,如果没有能力处理就声明异常。
举一个常见的例子:
例如:一个客户端要调用receive方法接受服务端发送过来的UDP数据包,这个过程中可能会触发IOException异常。
public synchronized void receive(DatagramPacket pack) throws IOException
如果你清楚发生异常后的处理方法,则在receive方法中处理该异常。
但是,在应用程序中往往在多处调用receive方法,程序中对应不同的receive有不同的处理方法:
可能会弹出一个对话框提示用户;可能会直接显示一条错误消息;可能会再次尝试接受等等。
在这种情况下,则要声明异常,让调用者决定使用那种方式处理。
处理异常一般有以下几种处理方式:
1,记录异常和相关信息;
2,要求用户或应用程序输入信息;
3,使用默认值或替换数据;
4,将控制转移到应用程序的其他地方;
5,将异常转换为其他形式;
6,忽略问题;(不建议这种方式)
7,重试操作;
8,采取替换或回复操作;
9,使系统做好停止准备。
异常处理注意事项:
1,不要在catch块吞掉异常:
catch (NoSuchMethodException e) {
return null;
}
2,声明或者捕获特定的异常而不是Exception:
public void call() throws Exception {
}
try {
call();
} catch (Exception e) {
System.err.error("call failed");
}
public void call() throws IOException,FileNotFoundException {
}
3,尽量使用链表异常:
catch (NoSuchMethodException e) {
throw new MyException("Exception: " + e.getMessage());
}
catch (NoSuchMethodException e) {
throw new MyException("Exception: e.getMessage()",e);
}
4,不要同时打印异常信息和抛出异常:
catch (NoSuchMethodException e) {
Log.d("Exception", e);
throw e;
}
5,不要在finally快中抛出异常:
try {
someMethod();
} finally {
cleanUp();
}
6,如果不想在catch中处理异常,则使用finally块代替:
try {
someMethod();
} finally {
cleanUp();
}
7,不要用异常控制程序流程。