2010-04-01 14 views
71

Sto passando attraverso un programma socket. In esso, printStackTrace viene chiamato sull'oggetto IOException nel blocco catch.
Cosa fa in realtà printStackTrace()?Qual è l'uso del metodo printStackTrace() in Java?

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

Non sono a conoscenza del suo scopo. A cosa serve?

+36

Una delle caratteristiche più potenti moderno IDE è la capacità di guardare in alto la documentazione (chiamato javadoc) per un determinato metodo Java. In Eclipse è Shift-F2 quando il cursore è posizionato sul nome del metodo printStackTrace. –

+2

Sembra che tu sia nuovo in Java. Ecco qualcosa da leggere: http://today.java.net/article/2006/04/04/exception-handling-antipatterns – TJR

+0

Puoi anche leggere il codice di printStackTrace() per vedere esattamente cosa fa e come funziona esso. –

risposta

81

E prints the stack trace of the Exception to System.err.

È uno strumento molto semplice, ma molto utile per diagnosticare un'eccezione. Ti dice cosa è successo e dove è successo nel codice.

+1

E grazie alle eccezioni controllate è probabilmente il contenuto n. di blocchi 'catch' :-) – Joey

+1

@Joey Oppure' lancio nuova RuntimeException (e) ' –

13

Aiuta a tracciare l'eccezione. Ad esempio stai scrivendo alcuni metodi nel tuo programma e uno dei tuoi metodi causa bug. Quindi printtack ti aiuterà a identificare quale metodo causa l'errore. Stack aiuterà in questo modo:

Prima il tuo metodo principale verrà chiamato e inserito nello stack, quindi il secondo metodo verrà chiamato e inserito nello stack in ordine LIFO e se qualche errore si verifica da qualche parte all'interno di un metodo, questo stack aiuta a identificare quel metodo.

33

Ero un po 'curioso di sapere anche questo, così ho messo insieme un codice di piccolo assaggio dove si può vedere quello che sta facendo:

try { 
    throw new NullPointerException(); 
} 
catch (NullPointerException e) { 
    System.out.println(e); 
} 

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

Calling println(e):

java.lang.NullPointerException

Chiamare e.printStackTrace():

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

Questo è normale, con il primo si chiama toString() dell'errore e nel secondo si chiede di stampare tutto lo stackTrace dall'errore Sono due cose diverse. – Jon

+0

'System.err.println (e);' sarà più appropriato. – roottraveller

4

printStackTrace() stampe i luoghi in cui si è verificato l'eccezione nel codice sorgente, permettendo così l'autore che ha scritto il programma per vedere cosa è andato storto. Ma dal momento che mostra problemi nel codice sorgente, l'utente (s) che può o non può avere esperienza di codifica potrebbe non essere in grado di capire cosa è andato storto, quindi se il programma consente all'utente di inviare messaggi di errore agli autori, il gli utenti potrebbero non essere in grado di fornire buoni dati su ciò che è andato storto.

È necessario considerare il metodo Logger.getLogger(), offre una migliore gestione delle eccezioni (registrazione) e inoltre printStackTrace() senza argomenti è considerato obsoleto e dovrebbe essere utilizzato SOLO a scopo di debug, non per la visualizzazione dell'utente.

10

printStackTrace() aiuta il programmatore a capire dove si è verificato il problema. printStacktrace() è un metodo della classe Throwable del pacchetto java.lang. Stampa diverse righe nella console di output. La prima riga è composta da più stringhe. Contiene il nome della sottoclasse Throwable & le informazioni sul pacchetto. Dalla seconda riga in poi, descrive la posizione dell'errore/il numero di riga che inizia con at.

L'ultima riga descrive sempre la destinazione interessata dall'errore/eccezione.La penultima riga ci informa sulla riga successiva nello stack in cui il controllo va dopo aver ottenuto il trasferimento dal numero di linea descritto nell'ultima riga. Gli errori/eccezioni rappresentano l'output nel modulo uno stack, che sono stati inseriti nello stack tramite il metodo fillInStackTrace() della classe Throwable, che a sua volta riempie i dettagli del trasferimento del controllo del programma nello stack di esecuzione. Le righe che iniziano con at non sono altro che i valori dello stack di esecuzione. In questo modo il programmatore può capire in che punto del problema si trova il codice.

Insieme al metodo printStackTrace(), è consigliabile utilizzare e.getmessage().

+0

Buona fortuna a rispondere a una domanda di 5 anni, con risposta accettata, e in cui l'iniziatore avrebbe dovuto cercare il riferimento invece di postare su un forum. – Javier

+4

Bene, grazie Javier. Sembra che abbia ancora un lettore. –

+1

'' post.readers ++; '' –

0

Qual è l'utilizzo del metodo e.printStackTrace() in Java?

Bene, lo scopo di utilizzare questo metodo e.printStackTrace(); è vedere cosa è esattamente sbagliato.

Ad esempio, vogliamo gestire un'eccezione. Diamo un'occhiata al seguente esempio.

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

ho metodo e.printStackTrace(); usato per mostrare esattamente ciò che è sbagliato.

Nell'output, possiamo vedere il seguente risultato.

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) 
2

Il printStackTrace() aiuta il programmatore a capire dove si è verificato il problema reale. Il metodo printStackTrace() è un membro della classe Throwable nel pacchetto java.lang.

0

printStackTrace è un metodo della classe Throwable. questo metodo visualizza il messaggio di errore sulla console in cui stiamo ottenendo l'eccezione sul codice sorgente. Questi metodi possono essere utilizzati con blocco catch e descrivere:

  1. Nome dell'eccezione.
  2. Descrizione dell'eccezione.
  3. Dove stiamo ottenendo l'eccezione.

Esistono tre metodi che descrivono l'eccezione sulla console in cui printStackTrace è uno di questi. questi tre metodi sono:

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

Esempio:

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