标题:[讨论]大家来看一下这个类的输出
只看楼主
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
 问题点数:0 回复次数:9 
[讨论]大家来看一下这个类的输出

class ThreeException extends Exception { }

public class FinallyWorks {
static int count = 0;

/** Creates a new instance of FinallyWorks */
public static void main( String args[] ) {
while( true ) {
try {
if( count++ == 0 )
throw new ThreeException( );
System.out.println( "No Exception" );
} catch( ThreeException e ) {
System.err.println( "ThreeException" );
} finally{
System.err.println( "In finally clause" );
if( count == 2 ) break;
}
}
}

}
我运行的结果是:
No Exception
ThreeException
In finally clause
In finally clause
书上的结果是:
ThreeException
In finally clause
No Exception
In finally clause


PS:不管那一种结果我都看不懂 还请教

[此贴子已经被作者于2006-8-1 11:39:49编辑过]

搜索更多相关主题的帖子: Exception 输出 count public FinallyWorks 
2006-08-01 11:31
shiyide
Rank: 2
等 级:新手上路
威 望:4
帖 子:297
专家分:0
注 册:2006-2-22
得分:0 

我运行你的程序结果是你书上的结果啊`


学好编程,为中国的软件事业出一份力。
2006-08-01 11:35
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
得分:0 
............不是吧    那我工具有问题  那还请你讲一下  结果怎么来的啊

一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-01 11:40
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
得分:0 

我快晕了 cmd和工具运行得出的结果不一样...........


一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-01 12:08
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
得分:0 
大家帮你分析分析这个程序啊  我顶上来

一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-02 21:36
ada518618
Rank: 1
等 级:新手上路
帖 子:184
专家分:0
注 册:2006-3-27
得分:0 

class ThreeException extends Exception { }

public class FinallyWorks {
static int count = 0;

/** Creates a new instance of FinallyWorks */
public static void main( String args[] ) {
while( true ) {
try {
if( count++ == 0 )
throw new ThreeException( );
System.out.println( "No Exception" );
} catch( ThreeException e ) {
System.err.println( "ThreeException" );
} finally{
System.err.println( "In finally clause" );
if( count == 2 ) break;
}
}
}

}
至于LZ说的运行结果不对,那我就郁闷了……你是用什么工具!?我记得书上说过,如果你用非JDK工具编译运行错误,可以用JDK试下,很可能你就正确了!
呵,祝你好运!


Eclipse!尽管我现在不懂祢,可是我却对你情有独钟……
2006-08-02 22:36
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
得分:0 

我的主要问题不是这个啊 是谁可以帮你分析一下 这个结果怎么来的啊!!!
ThreeException
In finally clause
No Exception
In finally clause

[此贴子已经被作者于2006-8-3 10:35:57编辑过]


一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-03 10:35
yinfeifei
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-6-6
得分:0 

汗。。。我用JB9运行的结果是这样的:

ThreeException

In finally clause

In finally clause

No Exception

2006-08-05 17:00
ren829
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:15
帖 子:255
专家分:1174
注 册:2006-3-11
得分:0 

书上的运行结果是正确的:
首先是while循环,这个程序循环三次 0,1,2。2 的时候结束。
看看循环过程:
1:count = 0 看这个if( count++== 0 ) ,因为是count++ 而不是++count(同时count 变成1)。所以满足条件 ,于是执行if。接下来抛出异常throw new ThreeException( ); 那么就要转到catch语句了,于是System.err.println( "ThreeException" );那么就输出了一个ThreeException. 再向下执行finally语句。这个是无论有没有异常都执行的语句。于是有个In finally clause

2:count = 1 一样的过程 ,这个时候if( count++== 0 )不在满足条件了(同时count 变成2)。向下执行System.out.println( "No Exception" ); 于是有个No Exception:在向下执行,刚才说了finally语句无论有没有异常都执行于是在执行一次这个语句。又产生一次In finally clause
3:count = 2 结束循环。

其结果就是:
ThreeException
In finally clause
No Exception
In finally clause

这个是我的理解不知道正不正确,还请高手批评指点。

2006-08-05 17:52
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
得分:0 

ThreeException
In finally clause
No Exception
In finally clause

上面的是我在J#下运行后的结果


此号自封于2006年11月30日
2006-08-07 11:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-81396-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.659293 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved