黑马程序员技术交流社区
标题:
java异常求解
[打印本页]
作者:
熊永标
时间:
2013-4-11 08:57
标题:
java异常求解
1、不管try块程序是否异常,也不管哪个catch执行,finally块总会执行。
try语句块或会执行的catch语句块使用了JVM系统退出语句例外;//System.exit(1);
2、try块必须和 catch块或和finally同在,不能单独存在,二者必须出现一个。
3、不要在finally中使用return 或throw语句,否则将会导致try、catch中的return或throw失效。
红色字体在说明什么,为什么是这样?
作者:
绿树林
时间:
2013-4-11 09:04
对于java程序,运行System.exit()会终止JVM、、System.exit();里面的参数自己可以自由设置、、一般非0 都是非正常关闭、System.exit()中的参数,一般是操作系统用!主要是线程,或者是进程之间通讯的结果.也就是程序退出了,但是其他跟别的进程,或者是线程有关系,那就要采用一种方式通知对方.
作者:
熊永标
时间:
2013-4-11 09:09
郭华章 发表于 2013-4-11 09:04
对于java程序,运行System.exit()会终止JVM、、System.exit();里面的参数自己可以自由设置、、一般非0 都 ...
不理解,跟我问的没有什么关系呀,但还是谢谢你的回答.
作者:
柳 德 彬
时间:
2013-4-11 09:15
java.lang.System的源代码,我们可以找到System.exit(status)这个方法的说明,代码如下:
public static void exit(int status) {
Runtime.getRuntime().exit(status);
}
复制代码
这个方法是用来结束当前正在运行中的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是用来表示这个程序是非正常退出。
作者:
谢波
时间:
2013-4-11 09:19
就是说如果在try或者catch中有System.exit 那么finally就不执行了
作者:
通行天下
时间:
2013-4-11 09:58
try语句块或会执行的catch语句块使用了JVM系统退出语句例外;//System.exit(1);这句话的意思是说,只要你使用了System.exit(-1),就说明系统只要出现异常,程序就会结束了,不再执行啦。还有就是System.exit(1)的1应该改为-1表示系统不正常退出,System.exit (0)表示系统正常退出!希望对你有用。
作者:
奋斗2013
时间:
2013-4-11 10:04
System.exit(0)是停止整个运行程序。把这条语句放在
try{
执行的程序
System.exit(0)
}catch(异常类型){
异常处理
}finally{}
整个程序都停止掉了。当然就执行不的finally{}内的程序了。
作者:
王大斌
时间:
2013-4-11 12:39
遇到问题首先应该去看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
这句话的意思是说,如果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
作者:
黑马李杰
时间:
2013-4-11 17:47
try语句块或会执行的catch语句块使用了JVM系统退出语句例外;//System.exit(1);System.exit(1);当执行这句话的时候jvm都退出了,程序就不往下执行了,finally中的代码就不会运行了。
作者:
PANZERLEADER
时间:
2013-4-16 16:35
意思就是说,如果捕获异常,在异常体里面执行的代码是退出虚拟机,java虚拟机都退出了,那finally的代码就肯定不会执行的了;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2