java try catch finally 用法
public class Test {
public static void main(String[] args){
A a = new A();
a.foo();
}
}
class A{
public void foo(){
try{
System.out.println("try");
foo();
}catch (OutOfMemoryError e) {
System.out.println("catch");
foo();
}finally{
System.out.println("finally");
foo();
}
}
}
求结果,求解释
[解决办法]
死循环,自己调用自己,又没有结束的条件。try了catch到异常还是foo(),最后finally也是回执行的,所以是个死循环
[解决办法]
...
不解为什么这样写
[解决办法]
写的有点莫名其妙么。。自己调用自己。。
[解决办法]
StackOverflowError catch 这个异常,,,,
[解决办法]
finally 是不管怎么样都会执行的
[解决办法]
异常处理,不管有没有抛异常出来,finally是必须执行。 finally通常作用用来关闭连接资源,减少内存占有率。 在try语句块中加了finally,里面的内容是必须执行。
[解决办法]
这个问题有点意思,刚才运行了一下,很奇怪,每次结果都不一样,要等高人来解答了
[解决办法]
执行的结果:try
finally
try
finally
...出现未知个,看你的内存大小能坚持多久.....
catch
finally
catch
finally
......出现未知个,尝试感觉一下你的CPU风扇的转速............
后台不断的OutOfMemoryError e
StackOverflowError 异常,,,,
再下去的后果未知数。
解释:先执行try{}
finally无论是异常还是正常都执行
执行到内存溢出,执行catch() finally{}
所以打印出的结果是以上给出的结果。
[解决办法]
一看见这种没有业务意义的代码我头就晕
[解决办法]
有一个很奇怪的问题:如果直接运行的话,每次结果不一样,而且很没有规律,会输入finally
但是,如果每次打印完之后sleep一段时间的话,发现打印的都是try
public class TestThread{ public static void main(String[] args) throws Exception { A a = new A(); a.foo(); }}class A{ public void foo() throws Exception { try { System.out.println("try"); Thread.sleep(500); foo(); } catch (OutOfMemoryError e) { System.out.println("catch"); Thread.sleep(500); foo(); } finally { System.out.println("finally"); Thread.sleep(500); foo(); } }}
[解决办法]
额。。。。不带这么折腾内存的?
finally总是会执行的。
[解决办法]
try
用的是公司电脑跑。。发现跟10楼得结果也不一样了。
public class TestThread{ public static void main(String[] args) throws Exception { A a = new A(); a.foo(); }}class A{ public void foo() throws Exception { try { System.out.println("try"); Thread.sleep(500); foo(); } catch (OutOfMemoryError e) { System.out.println("catch"); Thread.sleep(500); foo(); } finally { System.out.println("finally"); Thread.sleep(500); foo(); } }}/* * output: * try * try * try * try * ... */
[解决办法]
cpu处理速度快,多个线程同时运行的话,打印结果应该是没有规律性的。。。而线程sleep,。。。
[解决办法]
死循环
这样写有何用意?
[解决办法]
LZ啊!!! 你到底想问啥呀?如过你问为什么finally会执行,一句话,不管有没有报错,finally都会执行,不然你用个报错的,catch也会跟着进来参合了,但是finally也会跟着进来。
[解决办法]
死循环不断的finally永远被调用所以永远是foo()方法调用自己
[解决办法]
机器因内存耗尽而死亡
[解决办法]
呵呵...我没经过自己电脑测试,我不想这么折腾电脑,所以自己估算着出结果,仅供大家参考
但是有点不明白的是15楼和18楼结果没有出现过catch,是不是从来不没有进到过chatch(){}块中,不解,哪位能在这解释一下么?