Метательный метод setStackTrace () в Java с примерами

Опубликовано: 11 Февраля, 2022

Метод setStackTrace (StackTraceElement [] stackTrace) класса Throwable используется для установки элементов трассировки стека в этот бросаемый объект, и эта трассировка стека будет возвращена getStackTrace () и распечатана printStackTrace () и связанными методами. Этот метод позволяет пользователю переопределить трассировку стека по умолчанию, которая либо генерируется функцией fillInStackTrace () при конструировании бросаемого объекта, либо десериализуется, когда бросаемый объект считывается из потока сериализации.
Если трассировка стека любого Throwable недоступна для записи, то вызов этого метода не имеет никакого эффекта, кроме проверки его аргумента.

Синтаксис:

 общественная пустота 
    setStackTrace (StackTraceElement [] stackTrace)

Параметры: этот метод принимает только один параметр stackTrace, который является элементами трассировки стека, которые должны быть связаны с этим Throwable.

Возвращает: этот метод ничего не возвращает.

Ниже программы иллюстрируют метод setStackTrace ():

Example 1:

// Java program to demonstrate
// the setStackTrace () Method.
  
import java.io.*;
  
class GFG {
  
    // Main Method
    public static void main(String[] args)
        throws Exception
    {
  
        try {
  
            testException1();
        }
  
        catch (Throwable e) {
  
            // access to the stack trace
            StackTraceElement[] trace = e.getStackTrace();
  
            System.out.println(trace[0].toString());
        }
    }
  
    // method which throws Exception
    public static void testException1()
        throws Exception
    {
  
        // create a new Exception
        Exception ex = new Exception();
  
        StackTraceElement[] trace = new StackTraceElement[] {
            new StackTraceElement("ClassNameOfExe",
                                  "methodNameOfExe",
                                  "fileNameOfExe",
                                  10)
        };
  
        // sets the stack trace elements
        ex.setStackTrace(trace);
  
        // throw the Throwable[
        throw ex;
    }
}
Output:
ClassNameOfExe.methodNameOfExe(fileNameOfExe:10)

Example 2:

// Java program to demonstrate
// the setStackTrace () Method.
  
import java.io.*;
  
class GFG {
  
    // Main Method
    public static void main(String[] args)
        throws Exception
    {
  
        try {
  
            Exceptiontest();
        }
  
        catch (Throwable e) {
  
            // access to the stack trace
            StackTraceElement[] trace = e.getStackTrace();
  
            System.out.println("StackTraceElement length :"
                               + trace.length);
  
            for (int i = 0; i < trace.length; i++) {
  
                System.out.println("Stack Trace at index "
                                   + i + " : "
                                   + trace[i]);
            }
        }
    }
  
    // method which throws Exception
    public static void Exceptiontest()
        throws Exception
    {
  
        // create a new Exception
        ArrayStoreException ex = new ArrayStoreException();
  
        StackTraceElement[] trace = new StackTraceElement[] {
            new StackTraceElement("ClassName1", "methodName1",
                                  "fileName1", 10),
            new StackTraceElement("ClassName2", "methodName2",
                                  "fileName2", 20),
            new StackTraceElement("ClassName3", "methodName3",
                                  "fileName3", 14)
        };
  
        // sets the stack trace elements
        ex.setStackTrace(trace);
  
        throw ex;
    }
}
Output:
StackTraceElement length :3
Stack Trace at index 0 : ClassName1.methodName1(fileName1:10)
Stack Trace at index 1 : ClassName2.methodName2(fileName2:20)
Stack Trace at index 2 : ClassName3.methodName3(fileName3:14)

Использованная литература:
https://docs.oracle.com/javase/10/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement%5B%5D)

Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .