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();
}
}
}求结果,求解释
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();
}
}
}求结果,求解释
解决方案 »
- 如何用java将一个文本按段提取出来?
- AWT中的TextField怎么获得焦点
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]用户 'sa' 登录失败。
- 请问如何在Eclipse中生成javadoc帮助文档?
- 如何获取窗口的边界尺寸
- 我是JAVA菜鸟,我下了eclipse.可是里面全是jar文件,我找不到安装文件,请问要我怎么装eclipse.
- 有个难题请高手解决。
- 请问如何一天结束了,就清空数据库呢?
- 问一个mysql的问题,为什么转义字串存到mysql中再取出全变成了带\的转义表达?
- 请问多少专家分,才能3,4,5颗星?
- 请教问题,抱歉占用大家宝贵的时间,请高手指点
- java的大侠们帮帮我吧~~~~
finally
try
finally
...出现未知个,看你的内存大小能坚持多久.....
catch
finally
catch
finally
......出现未知个,尝试感觉一下你的CPU风扇的转速............
后台不断的OutOfMemoryError e
StackOverflowError 异常,,,,
再下去的后果未知数。解释:先执行try{}
finally无论是异常还是正常都执行
执行到内存溢出,执行catch() finally{}
所以打印出的结果是以上给出的结果。
但是,如果每次打印完之后sleep一段时间的话,发现打印的都是trypublic 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();
}
}
}要是这样的话就容易理解,因为foo递归调用自己,打印完“try”之后又进行新的调用,不会结束,所以不断打印“try”,因为中间没有出现exception,所以这个不会打印,而finally是要到最后才会执行的,也不会打印但是不知道为什么不加sleep的时候会有那样的结果
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楼得结果也不一样了。
{
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
* ...
*/
但是有点不明白的是15楼和18楼结果没有出现过catch,是不是从来不没有进到过chatch(){}块中,不解,哪位能在这解释一下么?
现在发生的异常是java.lang.StackOverflowError。
发生异常时,自动调用了finally,所以打印出了“finally”。可以这么修改代码,就可以看到异常了。class A {
public void foo() {
try {
System.out.println("try");
foo();
} catch (OutOfMemoryError e) {
System.out.println("catch");
foo();
} finally {
System.out.println("finally"); }
}
}输出结果:
finally
finally
finally
Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.ext.DoubleByteEncoder.encodeArrayLoop(Unknown Source)
at sun.nio.cs.ext.DoubleByteEncoder.encodeLoop(Unknown Source)
at java.nio.charset.CharsetEncoder.encode(Unknown Source)
现在发生的异常是java.lang.StackOverflowError。
发生异常时,自动调用了finally,所以打印出了“finally”。可以这么修改代码,就可以看到异常了。class A {
public void foo() {
try {
System.out.println("try");
foo();
} catch (OutOfMemoryError e) {
System.out.println("catch");
foo();
} finally {
System.out.println("finally"); }
}
}输出结果:
finally
finally
finally
Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.ext.DoubleByteEncoder.encodeArrayLoop(Unknown Source)
at sun.nio.cs.ext.DoubleByteEncoder.encodeLoop(Unknown Source)
at java.nio.charset.CharsetEncoder.encode(Unknown Source)
谁能告诉我为什么debug情况一直打印try