web-dev-qa-db-ja.com

JavaでのprintStackTrace()メソッドの使用は何ですか?

ソケットプログラムを使用しています。その中で、printStackTraceはcatchブロックのIOExceptionオブジェクトで呼び出されます。
実際にprintStackTrace()は何をしますか?

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

私はその目的を知りません。それは何のために使われますか?

87
Venkat

これは、Exceptionインスタンスのメソッドであり、 インスタンスのスタックトレースをSystem.errに出力します です。

これは非常にシンプルですが、例外を診断するための非常に便利なツールです。何が起こったのか、コードのどこでこれが起こったのかがわかります。

実際にどのように使用されるかの例を次に示します。

try {
    // ...
} catch (SomeException e) { 
    e.printStackTrace();
}
92
Joachim Sauer

私もこれに興味があったので、それが何をしているかを見ることができる小さなサンプルコードをまとめました。

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)
38
Jens Bodal

例外をトレースするのに役立ちます。たとえば、プログラムでいくつかのメソッドを記述しているときに、メソッドの1つがバグを引き起こしている。次に、printstackは、どのメソッドがバグの原因であるかを特定するのに役立ちます。スタックは次のように役立ちます。

最初にメインメソッドが呼び出されてスタックに挿入され、次に2番目のメソッドが呼び出されてLIFO順にスタックに挿入されます。メソッド内のどこかでエラーが発生した場合、このスタックは方法。

14
yogesh pathak

printStackTrace()は、プログラマーが実際の問題が発生した場所を理解するのに役立ちます。 printStacktrace()は、Java.langパッケージのクラスThrowableのメソッドです。出力コンソールに数行を印刷します。最初の行はいくつかの文字列で構成されています。 Throwableサブクラスの名前とパッケージ情報が含まれています。 2行目以降は、atで始まるエラー位置/行番号を示します。

最後の行は、エラー/例外の影響を受ける宛先を常に説明しています。最後の2行目は、最後の行に記述されている行番号から転送を取得した後、スタック内の次の行について通知します。エラー/例外は、ThrowableクラスのfillInStackTrace()メソッドによってスタックに渡されたスタック形式の出力を表します。これは、プログラム制御転送の詳細を実行スタックに入力します。 atで始まる行は、実行スタックの値にすぎません。このようにして、プログラマは実際の問題がコードのどこにあるかを理解できます。

printStackTrace()メソッドとともに、e.getmessage()を使用することをお勧めします。

10
Ashish Gope

printStackTrace()は、ソースコードで例外が発生した場所を出力します。これにより、プログラムを作成した作成者は、問題の原因を確認できます。しかし、ソースコードに問題があるため、コーディング経験のあるユーザーまたはないユーザーは、何が問題なのかを理解できない可能性があります。そのため、プログラムがユーザーにエラーメッセージを作成者に送信することを許可している場合、ユーザーは、何が悪かったのかに関する良いデータを提供できないかもしれません。

Logger.getLogger()メソッドを検討する必要があります。これは、より優れた例外処理(ロギング)機能を提供します。また、引数のないprintStackTrace()は廃止されたと見なされ、ユーザー表示ではなくデバッグ目的でのみ使用する必要があります。

5
WIll

printStackTrace()は、プログラマーが実際の問題が発生した場所を理解するのに役立ちます。 printStackTrace()メソッドは、Java.langパッケージのクラスThrowableのメンバーです。

printStackTraceは、Throwableクラスのメソッドです。このメソッドは、コンソールにエラーメッセージを表示します。ソースコードで例外が発生する場所。これらのメソッドはcatchブロックで使用でき、次のことを説明します。

  1. 例外の名前。
  2. 例外の説明。
  3. ソースコード内の例外の場所。

コンソールで例外を説明する3つのメソッド(printStackTraceはそのうちの1つです)は次のとおりです。

  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());  
         }
    }
}
1
Bablu Mgc

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

printStackTrace()は、プログラマーが実際の問題が発生した場所を理解するのに役立ちます。例外をトレースするのに役立ちます。すべての例外クラスに継承されるThrowableクラスのprintStackTrace()メソッドです。このメソッドは、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)で

0
RohanMNirer