Wat is het gebruik van de printStackTrace()-methode in Java?

Ik ben bezig met een socketprogramma. Daarin wordt printStackTraceaangeroepen op het IOException-object in het catch-blok.
Wat doet printStackTrace()eigenlijk?

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

Ik ben me niet bewust van het doel ervan. Waar wordt het voor gebruikt?


Antwoord 1, autoriteit 100%

Het is een methode op Exception-instanties die print de stacktracering van de instantie af naar System.err.

Het is een heel eenvoudig, maar erg handig hulpmiddel voor het diagnosticeren van uitzonderingen. Het vertelt je wat er is gebeurd en waar in de code dit is gebeurd.

Hier is een voorbeeld van hoe het in de praktijk kan worden gebruikt:

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

Antwoord 2, autoriteit 41%

Ik was hier ook een beetje nieuwsgierig naar, dus ik heb zojuist een kleine voorbeeldcode samengesteld waar je kunt zien wat het doet:

try {
    throw new NullPointerException();
}
catch (NullPointerException e) {
    System.out.println(e);
}
try {
    throw new IOException();
}
catch (IOException e) {
    e.printStackTrace();
}
System.exit(0);

Bel println(e):

java.lang.NullPointerException

Bellen e.printStackTrace():

java.io.IOException
      at package.Test.main(Test.java:74)

Antwoord 3, autoriteit 14%

Het helpt om de uitzondering te traceren. U schrijft bijvoorbeeld enkele methoden in uw programma en een van uw methoden veroorzaakt een bug. Printstack zal je dan helpen te identificeren welke methode de bug veroorzaakt. Stack helpt als volgt:

Eerst wordt uw hoofdmethode aangeroepen en ingevoegd in de stapel, daarna wordt de tweede methode aangeroepen en ingevoegd in de stapel in LIFO-volgorde en als er ergens een fout optreedt in een methode, helpt deze stapel om die methode te identificeren.


Antwoord 4, autoriteit 11%

printStackTrace()helpt de programmeur om te begrijpen waar het werkelijke probleem zich voordeed. printStackTrace()is een methode van de klasse Throwablevan het pakket java.lang. Het drukt verschillende regels af in de uitvoerconsole.
De eerste regel bestaat uit verschillende strings. Het bevat de naam van de Throwable-subklasse & de pakketinformatie.
Vanaf de tweede regel beschrijft het de foutpositie/regelnummer beginnend met at.

De laatste regel beschrijft altijd de bestemming die wordt beïnvloed door de fout/uitzondering. De voorlaatste regel informeert ons over de volgende regel in de stapel waar de besturing naartoe gaat na overdracht van het regelnummer dat in de laatste regel is beschreven. De fouten/uitzonderingen vertegenwoordigen de uitvoer in de vorm van een stapel, die in de stapel is ingevoerd door de methode fillInStackTrace()van de klasse Throwable, die zelf de overdracht van de programmabesturing invult details in de uitvoeringsstapel. De regels die beginnen met at, zijn niets anders dan de waarden van de uitvoeringsstapel.
Op deze manier kan de programmeur begrijpen waar in de code het eigenlijke probleem zit.

Samen met de methode printStackTrace()is het een goed idee om e.getmessage()te gebruiken.


Antwoord 5, autoriteit 6%

printStackTrace()drukt de locaties af waar de uitzondering optrad in de broncode, zodat de auteur die het programma schreef kan zien wat er mis is gegaan. Maar aangezien het problemen in de broncode laat zien, kunnen de gebruiker(s) die al dan niet enige codeerervaring hebben, misschien niet begrijpen wat er mis is gegaan, dus als het programma de gebruiker toestaat om foutmeldingen naar de auteurs te sturen, gebruikers kunnen mogelijk geen goede gegevens geven over wat er mis is gegaan.

Je zou de Logger.getLogger()methode moeten overwegen, deze biedt een betere exception handling (logging) faciliteit, en bovendien wordt printStackTrace()zonder argumenten beschouwd als verouderd en mag ALLEEN worden gebruikt voor foutopsporingsdoeleinden, niet voor gebruikersweergave.


Antwoord 6, autoriteit 2%

De printStackTrace()helpt de programmeur te begrijpen waar het werkelijke probleem zich voordeed. De methode printStackTrace()is een lid van de klasse Throwablein het pakket java.lang.


Antwoord 7, autoriteit 2%

printStackTraceis een methode van de klasse Throwable. Deze methode geeft een foutmelding weer in de console; waar we de uitzondering in de broncode krijgen. Deze methoden kunnen worden gebruikt met catch-blok en ze beschrijven:

  1. Naam van de uitzondering.
  2. Beschrijving van de uitzondering.
  3. Locatie van de uitzondering in de broncode.

De drie methoden die de uitzondering op de console beschrijven (waarin printStackTrace er één van is) zijn:

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

Voorbeeld:

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

Antwoord 8

printStackTrace() helpt de programmeur om te begrijpen waar het werkelijke probleem zich voordeed. Het helpt om de uitzondering op te sporen.
het is de printStackTrace()-methode van de Throwable-klasse die wordt geërfd door elke uitzonderingsklasse. Deze methode print hetzelfde bericht van e object en ook het regelnummer waar de uitzondering optrad.

Het volgende is een ander voorbeeld van een afdrukstapel van de uitzondering in 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: dit is een nieuwe uitzondering in Java…
op ClassName.methodName(fileName:5)


Antwoord 9

Wat is het gebruik van de e.printStackTrace()-methode in Java?

Nou, het doel van het gebruik van deze methode e.printStackTrace();is om te zien wat er precies mis is.

We willen bijvoorbeeld een uitzondering afhandelen. Laten we het volgende voorbeeld eens bekijken.

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

Ik heb methode e.printStackTrace();gebruikt om precies te laten zien wat er mis is.

In de uitvoer zien we het volgende resultaat.

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)

Other episodes