package com.jiben.Test;public class J_Test1 {
public static void main(String[] args){
try{
System.out.println("1");
if(true)
return;
}
catch(RuntimeException e1){
System.out.println("2");
return;
}
catch(Exception e2){
System.out.println("3");
return;
}
finally{
System.out.println("4");
}
System.out.println("End!");
}
}为何 End!没有输出 请高收解释

解决方案 »

  1.   


    System.out.println("1");
    之后if true ,然后就执行finally里的System.out.println("4");
    然后
    就跑到return去了,当然不会执行end了
      

  2.   

    所谓finally,是无论有没有异常都会执行。finally外的自然不执行了 同1楼的说法。
      

  3.   

    从你的代码中可以看出 在try中 就已经return 出了,catch都没有运行,
    try后总是要执行finally中的语句块
    打印结果就是
    1
    4如果catch了,就有在catch中语句块return出,再执行 finally 中语句块
      

  4.   

    finally语句块:在try——catch语句块后面,还可以使用finally语句块,用于定义总是被执行的代码段,而不考虑是否有异常被捕获。如果try语句块没有发生异常,则finally语句块在try语句块完成之后立即执行;如果有异常抛出,则finally语句在正确的catch语句块完成之后立即执行。finally语句块为异常提供了一个统一的出口,使得程序控制转移前,能够对程序状态进行统一的管理,例如关闭文件、释放网络套接字以及执行代码需要的任何其他清理操作。
    只有一种情况finally语句块不执行:受保护代码(try语句块中的代码)中调用System。exit()强行终止程序。如果try语句块或者catch语句块中有return语句,都会首先执行finally语句块的内容然后再执行return语句。
      

  5.   

    方法的执行顺序是从上到下,一般会终止方法执行的有:return,异常,System.exit(arg0)等,所以return后“end”就不会输出。
      

  6.   

    打印结果就是
    1
    4
    然后 return 
    后面的代码不会被执行的
      

  7.   

    return会终止程序的执行的,但finally语句块比较特殊,会在执行return前被执行。try-catch-fianlly语句块后的语句是不会被执行的
      

  8.   

    try..catch 不会终止程序往下执行,而异常比如Exception就会。
    至于finally,一般是用来释放一些必须要释放的资源时用,在finally里的语句不管是否出错都会执行。
    主要的就是这样的。