java 异常处理

异常处理
1 假设你调用了一个不是自己写的方法(调用别人写的类)
2 别人的方法执行某些有风险的任务,可能会在运行的期间出现问题
3 你必须认识到该方法是有风险的
4 得写出可以在发生状况的时候加以处理的程序代码,未雨绸缪

java的异常处理
java 的异常处理(exception-handling)
异常是一种Exception类型的对象
java.lang.Object
  java.lang.Throwable
      java.lang.Exception
 //编写可能抛出异常的方法是,他们都必须声明有异常
public void takeRisk() throws Exception{//
if(somethingwrong){
 throw new Exception();
 }
}
public  void testRist(){
 try{
 this.takeRisk();
 }catch(Exception e){
  e.printStackTrace();
 }
}
编译器不会注意RuntimeException 类型
java.lang.Object
  java.lang.Throwable
      java.lang.Exception
          java.lang.RuntimeException
         
finally :无论如何都要执行的部分
如果try块失败了,会抛出异常,流程会到catch部分,当catch部分执行完成时候,会执行finally部分
当finally执行完成后,继续执行其余部分

如果try块成功了,会抛出异常,流程会跳过catch部分,会执行finally部分
当finally执行完成后,继续执行其余部分

如果try 或者catch块有return 指令,finally还是会执行,然后再跳回return指令

异常也是多态的,catch块要从小到大
catch(TeeShirtException e){
 }
}catch(ShirtException e){

}
}catch(ClothingException e){

}

如果不想处理异常,可以把他再抛出去
public void takeRisk() throws Exception{
 Exception e =new Exception();
 throw e;
}
public  void testRisk()throws Exception{
 try{
 takeRisk();
 }catch(Exception e){
  System.out.println("catch");
  //e.printStackTrace();
 }
 
 finally{
  System.out.println("finally");
 }
 
 异常处理规则
 1 catch,finally,不能没有try
 2 try  catch之间不能有程序
 try{
 takeRisk();
 }catch(Exception e){
  System.out.println("catch");
  //e.printStackTrace();
 }
 3 try  一定要有 catcch或者finlly,但要注意第四项
 
 4 只带有finally的try必须要声明异常
 public  void testRisk()throws Exception{
 try{
 takeRisk();
 }
 
 finally{
  System.out.println("finally");
 }
}
再举个例子

public class Indecisive {
  public static void main(String[] args) {
         System.out.println(decision());
     }
     static boolean decision() {
         try {
             return true;
         } finally {
             return false;
         }
     }

}

就会发现它编译时没有任何错误,并且它所打印的是false。为什么呢?

原因就是在一个try-finally语句中,finally语句块总是在控制权离开try语句块时执行的[JLS 14.20.2]。无论try语句块是正常结束的,还是意外结束的,情况都是如此。一条语句或一个语句块在它抛出了一个异常,或者对某个封闭型语句执行了一个break或continue,或是象这个程序一样在方法中执行了一个return时,将发生意外结束。它们之所以被称为意外结束,是因为它们阻止程序去按顺序执行下面的语句。

当try语句块和finally语句块都意外结束时,在try语句块中引发意外结束的原因将被丢弃,而整个try-finally语句意外结束的原因将于finally语句块意外结束的原因相同。在这个程序中,在try语句块中的return语句所引发的意外结束将被丢弃,而try-finally语句意外结束是由finally语句块中的return造成的。简单地讲,程序尝试着(try)返回(return)true,但是它最终(finally)返回(return)的是false。

总之,每一个finally语句块都应该正常结束,除非抛出的是不受检查的异常。千万不要用一个return、break、continue或throw来退出一个finally语句块,并且千万不要允许将一个受检查的异常传播到一个finally语句块之外去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值