Java 多个System.out.println()调用显示在一行上?

Java 多个System.out.println()调用显示在一行上?,java,error-handling,Java,Error Handling,这个程序给出了一些奇怪的输出。在多次执行此循环后,我看到一行输出,其中包含三个单独的.println()函数的内容。为什么会发生这种情况 注意:此程序在无限循环中运行 public class Looping { static int i; public static void main(String agrs[]) { try { i++; System.out.println("In tr

这个程序给出了一些奇怪的输出。在多次执行此循环后,我看到一行输出,其中包含三个单独的.println()函数的内容。为什么会发生这种情况

注意:此程序在无限循环中运行

public class Looping
{
    static int i;
    public static void main(String agrs[])
    {
        try
        {
            i++;
            System.out.println("In try String agrs" +i +" ");
            main(i);
            System.out.println(i+"After main(i).**************************!!!!!!!~~~~~~~~~~~~~```````++++_(^&$^%&%$#%$^$#%^&Y%$^#%^%&@#%#$%");
        }
        catch(Error e)
        {

            System.out.println("Catch reached"+i);
            Looping q=new Looping();
            q.main(++i);
        }
    }

    public static void main(int k)
    {
        try
        {
            i++;
            System.out.println("In try int k -- " +i +" __ ");
            main(i);
            System.out.println(i+"After main(i).**************************!!!!!!!~~~~~~~~~~~~~```````++++_(^&$^%&%$#%$^$#%^&Y%$^#%^%&@#%#$%");
        }
        catch(Error e)
        {
            System.out.println("Catch of int k -- " + i + " Why there is no new line here???______");
            i++;
            System.out.println("i increasing done.. next executes main(++i)");
            main(++i);
        }
    }
}
以下是输出(删除了一些中间行):


println()
库函数中引发异常

在检测之后,我看到以下内容:

java.lang.StackOverflowError

java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579)
sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:271)
sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
java.io.PrintStream.write(PrintStream.java:526)
java.io.PrintStream.print(PrintStream.java:669)
java.io.PrintStream.println(PrintStream.java:823)
Looping.main(Looping.java:41)

你不只是无限循环,你在一个无限嵌套调用。这将填充调用堆栈,您的程序和您进行的任何库调用都将使用该堆栈。当
println()
调用开始工作时,它会自己进行调用。在某一点上,它会耗尽堆栈空间并引发异常。这将使您脱离现有的
catch
子句,进入下一个更高的嵌套
catch
子句。

为什么要用这个无限循环给JVM施加压力?这个示例完全没有用,有人能解释一下这段代码的用处吗?我正在尝试其他一些东西。。。我对结果感到惊讶,然后变得好奇。。仅此而已..你能给出你的输出吗?你的机器不太喜欢无限循环…println()是如何嵌套的?嵌套的不是
println()
,而是对
Looping.main()
Ops的所有调用!我弄错了。。因此,如果我们在第一次发生错误后调用任何其他库函数,那么当从catch块调用另一个函数(如println())时,catch块中会抛出另一个错误。如果堆栈空间(通过无限递归)比任何调用(库或否)都要少,将导致引发另一个错误。在您的特定情况下,堆栈仍然有足够的空间来容纳
println()
调用的开销,但在
println()
调用本身时会被填满。因为您是通过递归嵌套调用的,所以您也在嵌套
catch
块。因此,错误被堆栈上一级的相同
catch
块捕获。
java.lang.StackOverflowError

java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579)
sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:271)
sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
java.io.PrintStream.write(PrintStream.java:526)
java.io.PrintStream.print(PrintStream.java:669)
java.io.PrintStream.println(PrintStream.java:823)
Looping.main(Looping.java:41)