105

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

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

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

4

9 に答える 9

104

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

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

これが実際にどのように使用されるかの例です:

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

System.out「深刻な本番コード」では、さまざまな理由(有用性が低く、スレッドセーフではないなど)のために、通常はこれを実行したくないことに注意してください。このような場合、通常は、のようなコマンドを使用して同じ(または非常に類似した)出力を提供するログフレームワークを使用しますlog.error("Error during frobnication", e);

于 2010-04-01T12:47:38.117 に答える
45

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

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)
于 2014-02-14T19:43:06.633 に答える
14

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

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

于 2012-04-23T11:24:17.420 に答える
11

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

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

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

于 2015-08-01T16:42:45.557 に答える
6

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

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

于 2015-05-28T03:10:49.357 に答える
2

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

于 2017-06-30T18:25:38.940 に答える
2

printStackTraceThrowableクラスのメソッドです。このメソッドは、コンソールにエラーメッセージを表示します。ここで、ソースコードで例外が発生しています。これらのメソッドは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());  
         }
    }
}
于 2017-07-12T20:47:28.020 に答える
1

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)

于 2018-10-25T14:29:45.357 に答える
0

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)
于 2017-02-26T00:16:08.427 に答える