2010-04-01 2 views
71

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

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

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

+36

Один из самых мощных функций в современной среде IDE является возможность просмотра документации (так называемый javadoc) для данного Java-метода. В Eclipse это Shift-F2, когда курсор помещается в имя метода printStackTrace. –

+2

Похоже, вы новичок в Java. Вот что можно прочитать: http://today.java.net/article/2006/04/04/exception-handling-antipatterns – TJR

+0

Вы также можете прочитать код printStackTrace(), чтобы увидеть, что именно он делает и как он это делает Это. –

ответ

81

It prints the stack trace of the Exception to System.err.

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

+1

И благодаря проверенным исключениям это, вероятно, контент # 1 блоков 'catch' :-) – Joey

+1

@Joey Или' throw new RuntimeException (e) ' –

13

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

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

33

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

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) 
+0

Это нормально, с 1-го, вы вызываете toString() ошибки, а во 2-м запросите распечатать весь стекTrace от ошибки. Это 2 отличает вещи. – Jon

+0

'System.err.println (e);' будет более подходящим. – roottraveller

4

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

Вы должны рассмотреть метод Logger.getLogger(), он предлагает лучшее обработку исключений (каротаж) объекта, и к тому же printStackTrace() без аргументов считается устаревшим и только должны использоваться для целей отладки, а не для отображения пользователя.

10

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

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

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

+0

Удачи, ответив на 5-летний вопрос, с принятым ответом, и где инициатор должен был искать ссылку вместо публикации на форум. – Javier

+4

Хорошо Спасибо Хавье. Похоже, у меня все еще есть один читатель. –

+1

'' post.readers ++; '' –

0

Каково использование метода 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) 
2

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

0

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

  1. Наименование исключения.
  2. Описание исключения.
  3. Где мы получаем исключение.

Существует три метода, описывающих исключение на консоли, в которой printStackTrace является одним из них. эти три метода:

  1. printStackTrace()
  2. toString()
  3. getMessage()

Пример:

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()); 
     } 
    } 
} 
Смежные вопросы