了解Java堆栈
有以下代码:
public class Main { public static void main(final String[] args) throws Exception {
System.out.print("1");
doAnything();
System.out.println("2");
}
private static void doAnything() {
try {
doAnything();
} catch (final Error e) {
System.out.print("y");
}
}
}
并有输出:
1yyyyyyyy2
为什么它打印八次而不是“ y”。遇到Javaprintln()时如何调用?
回答:
在这里您正在捉住,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。
以上是 了解Java堆栈 的全部内容, 来源链接: utcz.com/qa/399381.html