📅  最后修改于: 2020-03-30 05:07:54             🧑  作者: Mango
java.lang.Throwable类的fillInStackTrace()方法在此Throwable对象中记录有关当前线程的堆栈帧的当前状态的信息。这意味着使用此方法可以看到类的当前方法的异常消息,其中调用fillInStackTrace()方法。如果还有其他消息可以从当前方法派生而抛出异常,则可以跳过这些其他消息详细信息。
语法:
public Throwable fillInStackTrace()
返回值:该方法返回对此Throwable对象的引用,在该对象上应用fillInStackTrace()。
下面的程序说明了Method类的fillInStackTrace()方法:
程序1:该程序显示如果不使用fillInStackTrace()方法将显示什么结果,以及如果使用fillInStackTrace()方法将发生什么结果
说明:使用fillInStackTrace()仅返回当前线程的帧的活动状态信息。因此,当调用fillInStackTrace()时,该方法将返回详细信息,直到调用fillInStackTrace()方法的main方法为止。
// Java展示如何使用
// fillInStackTrace()方法
public class GFG {
// Main方法
public static void main(String[] args) throws Throwable
{
GFG gfg = new GFG();
try {
// 调用此方法将会出现异常
gfg.method();
}
catch (Exception e) {
// 不使用fillInStackTrace()
System.out.println("异常详情,没有调用fillInStackTrace()\n");
System.err.println("在Main内调用:");
e.printStackTrace();
// 异常详情,调用 fillInStackTrace()
System.out.println("异常详情,调用 fillInStackTrace()\n");
System.err.println("在Main内调用:");
e.fillInStackTrace();
e.printStackTrace();
}
}
// 方法调用divide运算符
public void method() throws Throwable
{
divide();
}
// divide运算符爆出ArithmeticException异常
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程序,展示
// fillInStackTrace()方法
public class GFG {
// Main方法
public static void main(String[] args) throws Throwable
{
GFG gfg = new GFG();
try {
// 调用如下方法method将会异常
gfg.showResults();
}
catch (Exception e) {
// Exception详细信息使用fillInStackTrace()
e.printStackTrace();
}
}
// 方法调用exceptionThrownMethod()
// 当返回异常时,会调用fillInStackTrace()方法
public void showResults() throws Throwable
{
try {
exceptionThrownMethod();
}
catch (Exception e) {
e.printStackTrace();
throw e.fillInStackTrace();
}
}
// 方法爆出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)