谁能说说finally和except的具体用法(详细)
有教科书关于finally的说明如下:
    在任何情况下, finally块中的代码都会执行, 考虑三种情况:
    1. 如果try中没有异常, finally块执行, try语句的下一条语句被执行.(什么意思, 这句话是不是有毛病)
    2. 如果try中有一条语句引起异常, 并被catch捕获, 跳过try中其他语句, 执行catch块和finally块的语句.如果catch块没有重新抛出异常, 就会执行try语句之后的下一个语句.(什么意思, 难道执行完catch块后还会返回try块, 是不是错了)如果重新抛出异常, 就将异常传递给方法调用者.
    3. 如果try中有一个语句引起异常, 但是没有被任何catch块捕获, 就会跳过try块的其他语句, 执行finally子句, 并且将异常传递给这个方法的调用者.
    4. 即使在到达finally块之前有一个return语句, finally块还是会执行.

解决方案 »

  1.   

    try{
       //statement1
       //statement2
       //statement7 return result
    } catch (NullPointerException e) {
       //statement6 process Exception
       //statement5 throws new OtherException(e);
    } finally {
       //statement3
       
    }
    //statement41、如果statement1没有抛出异常,statement2被执行
    2、如果statement5没有被执行,statement4被执行
    3、如果statement1抛出Exception异常,catch只能捕获NullPointerException就会跳过try块的其他语      句, 执行finally子句, 并且将异常传递给这个方法的调用者.
    4、如果statement7被执行, statement3还是会被执行
      

  2.   

    是翻译的不太好
    书中想表达的是try这个代码块后边的语句在处理完异常后继续执行的记得计算机中透明是表示对用户不可见吧
    明显的很汉语习惯不一样,汉语中透明是可见内部的意思
    但英文中就相反  最初翻译成透明 后来行内就默认这个意思了结合上下文来理解
      

  3.   

    楼主需要记住的是不管try语句中有没有异常,或者catch中有没有捕获到异常,finally语句都会执行。一般finally语句用来做一些收尾的工作。比如在I/O中可以用来关闭流,例如,close(), flush().等等!
      

  4.   

    如果catch块没有重新抛出异常, 就会执行try语句之后的下一个语句.
    这里是指try整个块之后的语句,翻译的不太好吧
      

  5.   

    如果重新抛出异常, finally子句还执行吗?
      

  6.   

    发现异常了跳过try里面的其他语句 进入catch 将异常处理方式抛给用户。没有了,跳过catch执行下面
      

  7.   

    不管你return  break  中断执行 都会继续执行
      

  8.   

    一旦进入try块后无论是有没有遇到异常都会在最后执行finally块,如果try块中有return,那在执行return之前就会行执行finally块中的代码,楼主写个程序然后单步调试时观察下就知道了
      

  9.   

    说的很好,finally语句无论什么时候都一定会被执行
      

  10.   

    换种代码方式写你可能更能理解 public void Test(){
    if(try) {
    a=b;
    } else { 
    catch();
    finally();
    return;
    }
    if(try) {
    c=b;
    } else {
    catch()
    finally();
    return;
    }
    finally();
    return;
    }

    boolean try(int b){
    if(b!=null)
    return true;
    else
    return false;
    }

    void catch(){
    System.out.println(new NullPointerException().getMessage());
    }

    void finally(){
    System.out.println("finally执行完毕");
    }
      

  11.   

    忘记声明了,三个变量都是基本类型的,不接受null
      

  12.   

    -。-是b不是基本类型,基本类型没有null
      

  13.   

    try里面包含容易出问题的代码,catch 里面是诊断信息,finally里面是料理后事的。
    人总有得病的,得病了就得找医生诊断,catch就是诊断的医生它会把try里面监测的代码具体报出了什么异常给诊断出来。当然人也可能不生病,代码很正常的走下去。
    但是不管人是不是会生病,总是难免一死,finally里面就是要料理后事的
    呵呵
      

  14.   

    执行,如论如何都执行。 public static void main(String[] args) {
    try {
    String str = "1hh23";
    int a = Integer.parseInt(str);
    System.out.println(a);
    } catch(NumberFormatException ex) {
    try {
    int a = Integer.parseInt("t56y");
    } catch(NumberFormatException e) {
    ex.printStackTrace();
    }finally {
    System.out.println("finally 1");
    }
    } finally {
    System.out.println("finally");
    }
    }
      

  15.   

    这些教条的东西在最后总结的时候再看,说白了,finally是无论如何也要执行的。
    try里面的语句是碰到错误就跑到except里面,try快内的剩下的不执行。
    try所有的语句正确就不执行except里面。
      

  16.   

    不管怎么样 finally都会执行的
      

  17.   

    finally永远都会被执行就可以了
      

  18.   

    try里面正常执行,如果有异常执行catch,但最终无论如何finally里面的都会执行。。
      

  19.   


    其实这句话是错误的,有一个例外,在被执行了的try或catch语句中只要有System.exit(-1);这条语句(参数好像其他也可以,不一定非要-1),finally语句就不会被执行,因为程序都退出了。
      

  20.   

    “就会执行try语句之后的下一个语句的”意思是“执行try语句块(就是整个try-catch-finally结构)之后的下一条语句”