在这里您正在捉住,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。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)