在这里您正在捉住,
Error而不是
Exception在这种情况下您的程序会崩溃。
如果您尝试此代码(修改为添加静态计数器)
输出量public class StackError {static int i = 1;public static void main(final String[] args) throws Exception { System.out.print("1"); doAnything(); System.out.println("2");}private static void doAnything() { try { i++;// System.out.println(i); doAnything(); } catch (Error e) { System.out.print("y"+i+"-"); }}}
1y6869-2
因此,它已进行了
stackerror6869次(不同运行次数的更改),并打印了最后一个值。如果您只是
y像以前那样打印,则可能是输出被缓冲而不被刷新,因为它不是
println。
更新资料
在
System.out.println内部调用
PrintStream该缓冲。您不会丢失缓冲区中的任何数据,它会在缓冲区满后或显式调用flush时将所有数据全部写入到output(在您的情况下为端子)。
回到这种情况,这取决于内部动态,即堆栈已被填满多少,可以从捕获中执行多少打印语句
doAnything()以及将这些字符数写入缓冲区。最后在主背上印有数字
2。
javadoc对缓冲流的引用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)