📜  Java中的可抛出fillInStackTrace()方法

📅  最后修改于: 2022-05-13 01:55:17.770000             🧑  作者: Mango

Java中的可抛出fillInStackTrace()方法

Java.lang.Throwable类的fillInStackTrace()方法在这个 Throwable 对象中记录有关当前线程的堆栈帧的当前状态的信息。这意味着使用该方法可以看到类的当前方法的异常消息,其中调用了 fillInStackTrace() 方法。如果有可以从当前方法派生的其他消息,其中抛出异常,则可以跳过这些其他额外消息细节。

句法:

public Throwable fillInStackTrace()

返回值:此方法返回对此 Throwable 对象的引用,在该对象上应用了 fillInStackTrace()。

下面的程序说明了 Method 类的 fillInStackTrace() 方法:

程序 1:该程序显示如果不使用 fillInStackTrace() 方法会打印什么结果,如果使用 fillInStackTrace() 方法会发生什么

说明:使用 fillInStackTrace() 仅返回当前线程的帧的活动状态信息。因此,当调用 fillInStackTrace() 时,该方法会将详细信息返回到调用 fillInStackTrace() 方法的 main 方法。

// Java program to demonstrate
// fillInStackTrace() method
  
public class GFG {
    // Main Method
    public static void main(String[] args) throws Throwable
    {
        GFG gfg = new GFG();
        try {
            // calling this method will throw exception
            gfg.method();
        }
        catch (Exception e) {
  
            // Exception details without using fillInStackTrace()
  
            System.out.println("Exception details without fillInStackTrace()\n");
            System.err.println("Caught Inside Main:");
            e.printStackTrace();
  
            // Exception details using fillInStackTrace()
  
            System.out.println("Exception details with fillInStackTrace()\n");
            System.err.println("Caught Inside Main:");
            e.fillInStackTrace();
            e.printStackTrace();
        }
    }
  
    // method calling divide operation
    public void method() throws Throwable
    {
        divide();
    }
  
    // divide operation throws ArithmeticException exception
    void divide()
    {
  
        try {
            System.out.println(10 / 0);
        }
        catch (ArithmeticException e) {
            throw e;
        }
    }
}

输出:

Exception details without fillInStackTrace()

Caught Inside Main:
java.lang.ArithmeticException: / by zero
    at GFG.divide(GFG.java:38)
    at GFG.method(GFG.java:31)
    at GFG.main(GFG.java:13)

Exception details with fillInStackTrace()

Caught Inside Main:
java.lang.ArithmeticException: / by zero
    at GFG.main(GFG.java:23)

程序 2:此程序在应用 fillInStackTrace() 后打印详细信息。

说明:使用 fillInStackTrace() 仅返回当前线程的帧的活动状态信息。因此,当调用 fillInStackTrace() 时,该方法将异常详细信息返回到调用 fillInStackTrace() 方法的 showResults 方法。但是 main() 方法显示了整个异常细节,因为在 main 方法中没有调用 fillInStackTrace()。

// Java program to demonstrate
// fillInStackTrace() method
  
public class GFG {
  
    // Main Method
    public static void main(String[] args) throws Throwable
    {
        GFG gfg = new GFG();
        try {
            // calling this method will throw an exception
            gfg.showResults();
        }
        catch (Exception e) {
  
            // Exception details using fillInStackTrace()
            e.printStackTrace();
        }
    }
  
    // method calling exceptionThrownMethod()
    // and when method returns Exception
    // it is calling fillInStackTrace() method
    public void showResults() throws Throwable
    {
        try {
            exceptionThrownMethod();
        }
        catch (Exception e) {
            e.printStackTrace();
            throw e.fillInStackTrace();
        }
    }
  
    // method throwing exception
    public void exceptionThrownMethod() throws Exception
    {
        throw new Exception("this is thrown from function1()");
    }
}

输出:

java.lang.Exception: this is thrown from function1()
    at GFG.exceptionThrownMethod(GFG.java:35)
    at GFG.showResults(GFG.java:27)
    at GFG.main(GFG.java:13)

java.lang.Exception: this is thrown from function1()
    at GFG.showResults(GFG.java:30)
    at GFG.main(GFG.java:13)

参考: https: Java