黑马程序员技术交流社区

标题: 如何让finally中的语句不执行? [打印本页]

作者: 乔玉吉    时间: 2012-3-11 01:12
标题: 如何让finally中的语句不执行?
public class Test
{
        public static void main(String args[])
        {

                try
                {

                        return;

                }
                finally
                {

                        System.out.print("1");

                }
        }  
}

作者: 冯旭君    时间: 2012-3-11 01:32
在输出语句之前加上System.exit(0);

即:
public class Test {
        public static void main(String args[]) {

                try {

                        return;

                } finally {
                        System.exit(0);
                        System.out.print("1");

                }
        }
}
作者: 许圣建    时间: 2012-3-11 01:35
不用很麻烦啊,在finally那句打印语句之前加return;就OK了,不过这样就不会再执行try的return了。
作者: 王睿    时间: 2012-3-11 01:47
好像只有关掉JVM才行
作者: 付鹏    时间: 2012-3-11 02:25
不可能的事情。。fianlly本来就是总会被执行的, 再说了 你不想让他执行不写就是了,你写了不让他执行有什么意义呢?
作者: 刘豪杰    时间: 2012-3-11 02:40
当你捕获到异常的时候,在处理异常的时候你完全可以System.exit(0);命令虚拟机,在执行异常处理的时候,虚拟机都退出了,又怎么能执行finally块中的代码呢。所以,在finally前边的代码中加入System.exit(0),那么代码在执行到System.exit(0)时就退出了虚拟机,后边finally里边的代码也就不执行了,这个问题在第七届论坛里边提到过,你可以进第七届论坛里边找下
作者: 刘雷冲    时间: 2012-3-11 09:18
本帖最后由 刘雷冲 于 2012-3-11 11:17 编辑
  1. try {
  2.                         return;
  3.                         System.out.print("2");
  4.                        
  5.                 } finally {
  6.                           System.exit(0);
  7.                         System.out.print("1");
  8.                        
  9.                 }
复制代码
注:楼主可以打个断点试一下执行过程
作者: 王杰    时间: 2012-3-11 09:18
  1. public class Test {
  2.          public static void main(String args[]) {

  3.                 try {
  4.                          System.exit(0);
  5.                         return;
  6.                  }
  7. finally {
  8.                          System.out.print("1");

  9.                 }
  10.          }
  11. }
复制代码

作者: lucky_xingxing    时间: 2012-3-11 09:23
你想让finally里的语句不执行 那么你为什么要写呢?   既然你不想让她执行  最好的办法就是不写即可,毕竟 finally是可有可无的,你这样写了又不想让他执行岂不是自找麻烦了么
作者: baypm_jy    时间: 2012-3-11 11:22
在catch执行一个后面加一句:System.exit(0);或者不加:finally语句!
作者: baypm_jy    时间: 2012-3-11 11:29
package 异常;
import java.util.*;
public class exception {
    public static void main(String[] args){
        System.out.println("请输入一到三之间的数字");
        Scanner in=new Scanner(System.in);    这里如果输入一个a的话,后面就不会执行了
        int Code1 =in.nextInt();   
        try{
            switch(Code1){
            case 1:
            System.out.println(".Net");
            break;
            case 2:
            System.out.println("java");
            break;
            }
        }
        catch(Exception ex){
            System.out.println("输入不为数字");
        }
        finally{
            System.out.println("出错了");
        }
    }
}

int code1=it.nextInt()就出错了,

Scanner in=new Scanner(System.in);
        int Code1 =in.nextInt();
要把这两行也放到try{}中。

作者: 蒋安国    时间: 2012-3-11 12:07
解决方法是在finally的第一条语句中加上System.exit(0);
不用很麻烦啊,在finally那句打印语句之前加return;就OK了,不过这样就不会再执行try的return了。
这样也上可以的,不过try语句有三种呢,无需故意这样的,发生异常要么抛,要么try,如果你try了,但你要是不处理的话就要抛了啊。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2