Java中的异常处理

这里暂不介绍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;//这种方式会吞掉异常,丢失异常的cause。
}
2,声明或者捕获特定的异常而不是Exception:
public void call() throws Exception { //这会丢失异常的目的
}

//如果需要在call方法中加入一个新的被检查的异常,在catch中就不会知道这个改变,可能就会在运行时出错
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()); 
   //这样会丢失 stack trace
}

catch (NoSuchMethodException e) {
   throw new MyException("Exception: e.getMessage()",e); 
   //推荐这种方式
}
4,不要同时打印异常信息和抛出异常:
//这会导致在log中打印多重的日志信息
catch (NoSuchMethodException e) {
   Log.d("Exception", e);
   throw e;
}
5,不要在finally快中抛出异常:
try {
  someMethod();  //抛出异常1
} finally {
  cleanUp();    //如果抛出异常2,则会导致异常1永远丢失
}
6,如果不想在catch中处理异常,则使用finally块代替:
try {
  someMethod();
} finally {
  cleanUp();
}
7,不要用异常控制程序流程。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值