A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊永标 中级黑马   /  2013-4-11 08:57  /  2150 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、不管try块程序是否异常,也不管哪个catch执行,finally块总会执行。
         try语句块或会执行的catch语句块使用了JVM系统退出语句例外;//System.exit(1);
2、try块必须和 catch块或和finally同在,不能单独存在,二者必须出现一个。
3、不要在finally中使用return 或throw语句,否则将会导致try、catch中的return或throw失效。
红色字体在说明什么,为什么是这样?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

10 个回复

倒序浏览
对于java程序,运行System.exit()会终止JVM、、System.exit();里面的参数自己可以自由设置、、一般非0 都是非正常关闭、System.exit()中的参数,一般是操作系统用!主要是线程,或者是进程之间通讯的结果.也就是程序退出了,但是其他跟别的进程,或者是线程有关系,那就要采用一种方式通知对方.
回复 使用道具 举报
郭华章 发表于 2013-4-11 09:04
对于java程序,运行System.exit()会终止JVM、、System.exit();里面的参数自己可以自由设置、、一般非0 都 ...

不理解,跟我问的没有什么关系呀,但还是谢谢你的回答.
回复 使用道具 举报
java.lang.System的源代码,我们可以找到System.exit(status)这个方法的说明,代码如下:
  1. public static void exit(int status) {
  2.     Runtime.getRuntime().exit(status);
  3. }
复制代码
这个方法是用来结束当前正在运行中的java虚拟机。如何status是非零参数,那么表示是非正常退出。

    System.exit(0)是将你的整个虚拟机里的内容都停掉了 ,而dispose()只是关闭这个窗口,但是并没有停止整个application exit() 。无论如何,内存都释放了!也就是说连JVM都关闭了,内存里根本不可能还有什么东西
    System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序
    System.exit(status)不管status为何值都会退出程序。和return 相比有以下不同点:return是回到上一层,而System.exit(status)是回到最上层。
示例:
在一个if-else判断中,如果我们程序是按照我们预想的执行,到最后我们需要停止程序,那么我们使用System.exit(0),而System.exit(1)一般放在catch块中,当捕获到异常,需要停止程序,我们使用System.exit(1)。这个status=1是用来表示这个程序是非正常退出。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
就是说如果在try或者catch中有System.exit 那么finally就不执行了
回复 使用道具 举报
try语句块或会执行的catch语句块使用了JVM系统退出语句例外;//System.exit(1);这句话的意思是说,只要你使用了System.exit(-1),就说明系统只要出现异常,程序就会结束了,不再执行啦。还有就是System.exit(1)的1应该改为-1表示系统不正常退出,System.exit (0)表示系统正常退出!希望对你有用。
回复 使用道具 举报
System.exit(0)是停止整个运行程序。把这条语句放在
try{
  执行的程序
System.exit(0)
}catch(异常类型){
异常处理
}finally{}
整个程序都停止掉了。当然就执行不的finally{}内的程序了。
回复 使用道具 举报
遇到问题首先应该去看jdk文档,那个是一手资料

比如,当它说System时候,我就去查


其中有这个方法

exit
public static void exit(int status)终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。
该方法调用 Runtime 类中的 exit 方法。该方法永远不会正常返回。

调用 System.exit(n) 实际上等效于调用:

Runtime.getRuntime().exit(n)

参数:
status - 退出状态。

其实主函数在一个主线程中,当调用的时候,就会停止主线程了,也就是都结束了,还能运行finally??
回复 使用道具 举报
李罡 中级黑马 2013-4-11 12:43:21
9#
这句话的意思是说,如果try或者catch语句中的System.exit(1)语句能够执行到,则程序停止,System.exit(1)后面的语句和finally语句都执行不到了。但如果System.exit(1)语句没有被执行到,则finally中的语句照样可以执行,如下面的程序:
import java.io.*;
class TestExcetion
{
        public static void main(String[] args)
        {
                try
                {
                        //Thread.sleep(10);
                        BufferedReader bufr = new BufferedReader(new FileReader("adsgg.txt"));
                        System.out.println(".......");
                        System.exit(1);
                }
                catch (Exception e)
                {
                }
                finally
                {
                        System.out.println("hahahaha");
                }
                System.out.println("xixixixi");
        }
}

adsgg.txt文件不存在,System.exit(1)执行不到,输出语句为:
hahahaha
xixixixi

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
try语句块或会执行的catch语句块使用了JVM系统退出语句例外;//System.exit(1);System.exit(1);当执行这句话的时候jvm都退出了,程序就不往下执行了,finally中的代码就不会运行了。
回复 使用道具 举报
意思就是说,如果捕获异常,在异常体里面执行的代码是退出虚拟机,java虚拟机都退出了,那finally的代码就肯定不会执行的了;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马