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
- Java code
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总是会执行的。
[解决办法]
[解决办法]
跑了一遍。。。
tryfinallyfinally
try
try
try
try
tryfinallyfinally
tryfinallyfinally
try
tryfinallyfinally
tryfinallyfinally
try
try
tryfinallyfinally
tryfinallyfinally
try
tryfinallyfinally
tryfinallyfinally
try
try
try
tryfinallyfinally
tryfinallyfinally
try
tryfinallyfinally
tryfinallyfinally
try
try
tryfinallyfinally
tryfinallyfinally
try
tryfinallyfinally
tryfinallyfinally
try
用的是公司电脑跑。。发现跟10楼得结果也不一样了。
[解决办法]
有没有人来解释一下这个?
- Java code
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(){}块中,不解,哪位能在这解释一下么?