Java异常处理

基础语法及概念:

       java中的异常处理主要围绕着 try-catch-finally  throw  throws展开, java异常共分为运行时异常(Runtime Exception ) 和 非运行时异常(Checked Exception), 或者称之为

    受检查异常。  Java中所有的异常, 都继承至 Throwable. 其中Error类也继承至Throwable类, 不过若是发生这个原因, 就不能称之为异常了, 发生了Error异常,一般是Java

    系统在运行时发生了错误, 比如说运行堆内存不足, 程序发生了死锁。 除了将错误信息发回给用户外, 就已经没救了.


   Runtime Exception:

                运行时异常可以由用户造成, 也可以由本身的编码导致, 比如说ArrayIndexout... 数组越界异常, 或者用户输入了空值导致发生了nullPointerException空指针异常, 或 者在运行时找不到类 ClassNotFoundException 等.  运行时异常往往是最难处理的, 因为你不知道他会在什么时候发生, 有可能是你自己的代码触发,也可能是用户的输入触发。 他在语法上不需要声明抛出异常。



Checked Exception:

           受检查异常需要 try catch  或者 抛出去(throws ).  他一般表示程序有可能会在编译时期发生不确定的行为, 比如读写IO 数据库连接 或者装载一个类, 他们都需要程序员

         显示的 try catch finally,  其中finally 是 不管有没有发生异常都必须要执行的一个操作, 其一般用在关闭数据库连接, 关闭文件连接 等.  



异常处理的规范:

           咋地一看好像异常处理为程序健壮性提供了很大的方便, 但是我们只有在不得以的情况下才声明或者抛出异常。   你必考虑到异常也是API的一部分,这意味着

           如果你在写一个对外调用的接口, 比如说下面这样 声明他可能抛出的异常.

            

interface  demo throws  Exception{

   public  void demo1();
}

 这就意味着你在很长一段时间都无法摆脱这个异常,以后你要重构或进一步开发这些 API 时,不得不考虑这些异常带来的向后兼容性问题。因为,如果你在日后的版本中删除了某个异常的声明,就会造成之前用户的代码无法通过编译。 所以我们应该仔细设计可能发生的异常,


异常处理规范2:

异常处理的难点主要是在对于什么时候处理异常的理解上。在不同的层级上,你要考虑这个异常是不是应该在这个层级上进行处理,还是说应该继续向上抛出,甚至某些情况下还需要包装捕获到的异常,再向上抛出。

不同抽象层级上的代码应该只声明抛出同一层级上的异常。

就像处理界面(Controller)的代码不应该还会捕获处理数据库操作的异常一样(Service and dao)。 为了避免这个问题,更高层次的实现需要捕获低层次的异常,包装之后再抛出属于更高层次的异常,这种做法被称为异常转换:    

try {
    ...
} catch(LowerLevelException e) {
    throw new HigherLevelException(...);
}


try catch块应该尽量缩小, 简洁明了的声明哪行代码可能发生异常,并且尝试着把 try catch 作为一个流程, 千万不要catch 之后什么都不做, 比如说就记录一个

日志 或者打印Message 

String parm; 
try {
    param = jsonObj.getString("parm");
} catch (JSONException e) {
    e.printStackTrace();
    param = "default value";    //提供一个默认值
}















    

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值