日期:2014-05-20  浏览次数:20697 次

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总是会执行的。
------解决方案--------------------
探讨

按程序的流程来走,应该一直递归下去,finally应该执行不到。那为什么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