소켓 프로그램을 진행 중입니다. 그것 에서 catch 블록 printStackTrace
의 IOException
객체에 대해 호출됩니다 . 실제로
무엇을 printStackTrace()
합니까?
catch(IOException ioe)
{
ioe.printStackTrace();
}
나는 그 목적을 알지 못한다. 그것은 무엇을 위해 사용됩니까?
소켓 프로그램을 진행 중입니다. 그것 에서 catch 블록 printStackTrace
의 IOException
객체에 대해 호출됩니다 . 실제로
무엇을 printStackTrace()
합니까?
catch(IOException ioe)
{
ioe.printStackTrace();
}
나는 그 목적을 알지 못한다. 그것은 무엇을 위해 사용됩니까?
e.printStackTrace(); System.exit(1);
을 본다 . 여기서 나는 OP와 같은 질문을하고 싶지만 다른 맥락에서 : 정확히 이것의 목적은 무엇인가? 예외가 발생하면 JRE가 자동으로 stacktrace를 인쇄하고 종료하지 않습니까? 즉, 여기서는 "예외 처리"가별로 많지 않죠 ??
답변:
Exception
인스턴스 의 스택 추적 을 인쇄하는 인스턴스 의 메서드입니다.System.err
.
매우 간단하지만 예외를 진단하는 데 매우 유용한 도구입니다. 무슨 일이 있었는지, 코드에서이 일이 발생한 위치를 알려줍니다.
다음은 실제로 사용되는 방법의 예입니다.
try {
// ...
} catch (SomeException e) {
e.printStackTrace();
}
catch
:-) 블록
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 ()는 프로그래머가 실제 문제가 발생한 위치를 이해하는 데 도움이됩니다. 예외를 추적하는 데 도움이됩니다. 모든 예외 클래스에 상속 된 Throwable 클래스의 printStackTrace () 메서드입니다. 이 메소드는 e 객체의 동일한 메시지와 예외가 발생한 줄 번호를 인쇄합니다.
다음은 Java의 Exception 인쇄 스택의 또 다른 예입니다.
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)
Java에서 e.printStackTrace () 메서드를 사용하는 방법은 무엇입니까?
이 방법을 사용하는 목적은 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)