Прохожу через программу сокета. В нем printStackTrace
вызывается IOException
объект в блоке catch.
Что на printStackTrace()
самом деле делает?
catch(IOException ioe)
{
ioe.printStackTrace();
}
Я не знаю его цели. Для чего его используют?
Прохожу через программу сокета. В нем printStackTrace
вызывается IOException
объект в блоке catch.
Что на printStackTrace()
самом деле делает?
catch(IOException ioe)
{
ioe.printStackTrace();
}
Я не знаю его цели. Для чего его используют?
e.printStackTrace(); System.exit(1);
Здесь я хочу задать тот же вопрос, что и OP, но в другом ключе: какова именно цель этого? Не будет ли JRE автоматически печатать трассировку стека и завершать работу при возникновении исключения? То есть, здесь не так уж много "обработки исключений", верно ??
Ответы:
Это метод Exception
экземпляров, который выводит трассировку стека экземпляра вSystem.err
.
Это очень простой, но очень полезный инструмент для диагностики исключений. Он сообщает вам, что произошло и где в коде это произошло.
Вот пример того, как это можно использовать на практике:
try {
// ...
} catch (SomeException e) {
e.printStackTrace();
}
catch
блоков №1 :-)
throw new RuntimeException(e)
Мне это тоже было любопытно, поэтому я просто собрал небольшой пример кода, где вы можете увидеть, что он делает:
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)
System.err.println(e);
будет уместнее.
Это помогает отследить исключение. Например, вы пишете несколько методов в своей программе, и один из ваших методов вызывает ошибку. Затем printstack поможет вам определить, какой метод вызывает ошибку. Стек поможет так:
Сначала будет вызван ваш основной метод и вставлен в стек, затем будет вызван второй метод и вставлен в стек в порядке LIFO, и если какая-либо ошибка произойдет где-то внутри любого метода, этот стек поможет идентифицировать этот метод.
printStackTrace()
помогает программисту понять, где действительно возникла проблема. printStacktrace()
это метод класса Throwable
из java.lang
пакета. Он выводит несколько строк в консоль вывода. Первая строка состоит из нескольких строк. Он содержит имя подкласса Throwable и информацию о пакете. Начиная со второй строки, он описывает позицию ошибки / номер строки, начиная сat
.
Последняя строка всегда описывает пункт назначения, затронутый ошибкой / исключением. Вторая последняя строка сообщает нам о следующей строке в стеке, куда переходит управление после получения передачи с номера строки, описанной в последней строке. Ошибки / исключения представляют собой вывод в виде стека, который был загружен в стек fillInStackTrace()
методом Throwable
класса, который сам заполняет детали передачи управления программой в стек выполнения. Строки, начинающиеся с at
, - не что иное, как значения стека выполнения. Таким образом, программист может понять, где в коде реальная проблема.
printStackTrace()
Это хорошая идея, наряду с методом e.getmessage()
.
printStackTrace()
печатает места возникновения исключения в исходном коде, позволяя автору, написавшему программу, увидеть, что пошло не так. Но поскольку он показывает проблемы в исходном коде, пользователи, которые могут иметь или не иметь опыта программирования, могут быть не в состоянии понять, что пошло не так, поэтому, если программа позволяет пользователю отправлять сообщения об ошибках авторам, пользователи могут быть не в состоянии предоставить достоверные данные о том, что пошло не так.
Вы должны рассмотреть этот Logger.getLogger()
метод, он предлагает лучшую возможность обработки исключений (ведения журнала) и, кроме того, printStackTrace()
без аргументов считается устаревшим и должен использоваться ТОЛЬКО для целей отладки, а не для отображения пользователем.
Это printStackTrace()
помогает программисту понять, где действительно возникла проблема. printStackTrace()
Метод является членом класса Throwable
в java.lang
пакете.
printStackTrace
это метод Throwable
класса. Этот метод отображает сообщение об ошибке в консоли; где мы получаем исключение в исходном коде. Эти методы можно использовать с блоком catch, и они описывают:
Три метода, описывающих исключение на консоли (в которых printStackTrace является одним из них):
printStackTrace()
toString()
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());
}
}
}
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 ... в ClassName.methodName (fileName: 5)
Какая польза от метода 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)