Какая польза от метода printStackTrace () в Java? - PullRequest
87 голосов
/ 01 апреля 2010

Я иду через программу сокетов. В нем printStackTrace вызывается для объекта IOException в блоке catch.
Что на самом деле делает printStackTrace()

catch(IOException ioe)
{
    ioe.printStackTrace();
}

Я не знаю о его цели. Для чего его используют?

Ответы [ 9 ]

92 голосов
/ 01 апреля 2010

Это метод для Exception экземпляров, который печатает трассировку стека экземпляра в System.err.

Это очень простой, но очень полезный инструмент для диагностики исключений. Он сообщает вам, что произошло и где в коде это произошло.

Вот пример того, как это может быть использовано на практике:

try {
    // ...
} catch (SomeException e) { 
    e.printStackTrace();
}
38 голосов
/ 14 февраля 2014

Мне тоже было любопытно, поэтому я просто собрал небольшой пример кода, где вы можете увидеть, что он делает:

try {
    throw new NullPointerException();
}
catch (NullPointerException e) {
    System.out.println(e);
}

try {
    throw new IOException();
}
catch (IOException e) {
    e.printStackTrace();
}
System.exit(0);

Вызов println(e):

java.lang.NullPointerException

Вызов e.printStackTrace():

java.io.IOException
      at package.Test.main(Test.java:74)
14 голосов
/ 23 апреля 2012

Помогает отследить исключение. Например, вы пишете несколько методов в своей программе, и один из них вызывает ошибку. Затем printstack поможет вам определить, какой метод вызывает ошибку. Стек поможет так:

Сначала ваш основной метод будет вызван и вставлен в стек, затем будет вызван второй метод и вставлен в стек в порядке LIFO, и если какая-либо ошибка произойдет где-либо внутри какого-либо метода, этот стек поможет идентифицировать этот метод. 1003 *

10 голосов
/ 01 августа 2015

printStackTrace() помогает программисту понять, где произошла настоящая проблема. printStacktrace() - это метод класса Throwable из пакета java.lang. Он печатает несколько строк в консоли вывода. Первая строка состоит из нескольких строк. Он содержит имя подкласса Throwable и информацию о пакете. Начиная со второй строки, он описывает позицию ошибки / номер строки, начиная с at.

Последняя строка всегда описывает пункт назначения, на который повлияла ошибка / исключение. Вторая последняя строка информирует нас о следующей строке в стеке, куда отправляется элемент управления после получения перевода с номера строки, описанного в последней строке. Ошибки / исключения представляют выходные данные в виде стека, которые были переданы в стек методом fillInStackTrace() класса Throwable, который сам заполняет детали передачи управления программой в стек выполнения. Строки, начинающиеся с at, представляют собой не что иное, как значения стека выполнения. Таким образом, программист может понять, где в коде реальная проблема.

Наряду с методом printStackTrace() рекомендуется использовать e.getmessage().

5 голосов
/ 28 мая 2015

printStackTrace() печатает места, где произошло исключение в исходном коде, что позволяет автору, написавшему программу, увидеть, что пошло не так. Но так как это показывает проблемы в исходном коде, пользователь (пользователи), которые могут иметь или не иметь никакого опыта кодирования, могут не понимать, что пошло не так, поэтому, если программа позволяет пользователю отправлять сообщения об ошибках авторам, пользователи могут быть не в состоянии дать хорошие данные о том, что пошло не так.

Вам следует рассмотреть метод Logger.getLogger(), он предлагает лучшую возможность обработки (регистрации) исключений, и, кроме того, printStackTrace() без аргументов считается устаревшим и должен использоваться ТОЛЬКО для целей отладки, а не для отображения пользователем. 1006 *

2 голосов
/ 30 июня 2017

printStackTrace() помогает программисту понять, где произошла настоящая проблема. Метод printStackTrace() является членом класса Throwable в пакете java.lang.

1 голос
/ 12 июля 2017

printStackTrace - это метод класса Throwable. Этот метод отображает сообщение об ошибке в консоли; где мы получаем исключение в исходном коде. Эти методы можно использовать с блоком catch, и они описывают:

  1. Название исключения.
  2. Описание исключения.
  3. Местоположение исключения в исходном коде.

Три метода, которые описывают исключение на консоли (в котором printStackTrace является одним из них):

  1. printStackTrace()
  2. toString()
  3. getMessage()
* +1025 * Пример:
public class BabluGope {
    public static void main(String[] args) {
        try {
            System.out.println(10/0);
         } catch (ArithmeticException e) {
             e.printStackTrace();   
             // System.err.println(e.toString());
             //System.err.println(e.getMessage());  
         }
    }
}
0 голосов
/ 25 октября 2018

printStackTrace () помогает программисту понять, где произошла настоящая проблема. Это помогает отследить исключение. это метод printStackTrace () класса Throwable, унаследованный каждым классом исключений. Этот метод печатает то же сообщение объекта e, а также номер строки, где произошло исключение.

Ниже приведен еще один пример стека печати Исключения в Java.

public class Demo {
   public static void main(String[] args) {
      try {
         ExceptionFunc();
      } catch(Throwable e) {
         e.printStackTrace();
      }
   }
   public static void ExceptionFunc() throws Throwable {
      Throwable t = new Throwable("This is new Exception in Java...");

      StackTraceElement[] trace = new StackTraceElement[] {
         new StackTraceElement("ClassName","methodName","fileName",5)
      };
      t.setStackTrace(trace);
      throw t;
   }
}

java.lang.Throwable: это новое исключение в Java ... at ClassName.methodName (fileName: 5)

0 голосов
/ 26 февраля 2017

Для чего используется метод e.printStackTrace () в Java?

Ну, цель использования этого метода e.printStackTrace(); состоит в том, чтобы увидеть, что именно не так.

Например, мы хотим обработать исключение. Давайте посмотрим на следующий пример.

public class Main{

  public static void main(String[] args) {

    int a = 12;
    int b = 2;

    try {
       int result = a / (b - 2);
       System.out.println(result);
    }

    catch (Exception e)
    {
       System.out.println("Error: " + e.getMessage());
       e.printStackTrace();
    }
  }
}

Я использовал метод e.printStackTrace();, чтобы показать, что именно не так.

В выводе мы видим следующий результат.

Error: / by zero

java.lang.ArithmeticException: / by zero

  at Main.main(Main.java:10)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
...