我得到这个程序的不规则输出?为什么?
I'm getting irregular output for this program? Why?
最后的例子
public class FinallyExample {
public static void main(String[] args) {
new FinallyExample().dothework();
}
public void dothework()
{
Object o=null;
for(int i=0;i<=4;i++)
{
System.out.println(" "+i);
try{ o=makeObj(i);}catch(IllegalArgumentException e){System.err.println("Error: ("+e.getMessage()+").");}
finally{System.err.println("All done");
/*if(o==null)
{
System.exit(0);
}*/
}
System.out.println(o);
}
}
public Object makeObj(int type) throws IllegalArgumentException
{
if(type==1) throw new IllegalArgumentException ("Don't like type"+type);
return null;
}
}
输出顺序总是不同的!
我正在使用 eclipse。
O/P-
全部做完
错误:(不喜欢 type1)。 0 //当 i=1 时应该打印这一行
无效的
1
全部完成
无效的
2个
全部做完
无效的
3个
全部做完
无效的
4个
全部做完
空
O/P- 0
全部完成
1
错误:(不喜欢 type1)。
全部做完
无效的
2个
全部做完
无效的
3个
全部做完
无效的
4个
全部做完
空
基本上,您正在写信给 System.out
和 System.err
。目前还不清楚(并且特定于实现)它们将缓冲多少数据,或者它们何时被刷新,但您不必期望每次都保持一致。
我预计在写入 System.out
后调用 System.out.flush()
并在写入 System.err
后调用 System.err.flush()
会解决这个问题 - 但至少在 Eclipse 中,它不会'似乎没有。 (运行 Windows 命令提示符中的相同代码每次都会给出相同的输出,即使没有刷新。)
基本上,这似乎是 Eclipse 控制台实现的产物。我不会担心 - 当你试图诊断事情时要注意它。 (如果将所有诊断输出发送到同一个流,则不会有问题。)
最后的例子
public class FinallyExample {
public static void main(String[] args) {
new FinallyExample().dothework();
}
public void dothework()
{
Object o=null;
for(int i=0;i<=4;i++)
{
System.out.println(" "+i);
try{ o=makeObj(i);}catch(IllegalArgumentException e){System.err.println("Error: ("+e.getMessage()+").");}
finally{System.err.println("All done");
/*if(o==null)
{
System.exit(0);
}*/
}
System.out.println(o);
}
}
public Object makeObj(int type) throws IllegalArgumentException
{
if(type==1) throw new IllegalArgumentException ("Don't like type"+type);
return null;
}
}
输出顺序总是不同的!
我正在使用 eclipse。
O/P- 全部做完 错误:(不喜欢 type1)。 0 //当 i=1 时应该打印这一行 无效的 1
全部完成 无效的 2个 全部做完 无效的 3个 全部做完 无效的 4个 全部做完 空
O/P- 0 全部完成 1
错误:(不喜欢 type1)。 全部做完 无效的 2个 全部做完 无效的 3个 全部做完 无效的 4个 全部做完 空
基本上,您正在写信给 System.out
和 System.err
。目前还不清楚(并且特定于实现)它们将缓冲多少数据,或者它们何时被刷新,但您不必期望每次都保持一致。
我预计在写入 System.out
后调用 System.out.flush()
并在写入 System.err
后调用 System.err.flush()
会解决这个问题 - 但至少在 Eclipse 中,它不会'似乎没有。 (运行 Windows 命令提示符中的相同代码每次都会给出相同的输出,即使没有刷新。)
基本上,这似乎是 Eclipse 控制台实现的产物。我不会担心 - 当你试图诊断事情时要注意它。 (如果将所有诊断输出发送到同一个流,则不会有问题。)