2016-01-22 11 views
8

Tutto il googling che ho fatto sembra focalizzato su errori "catching". Voglio essere in grado di crescere da solo se sono soddisfatte determinate condizioni. Ho provato ad usare la classe Error() e le sue sottoclassi, ma Eclipse non le riconosce.Come aumentare un errore in Java?

Questo è quello che voglio fare:

if(some_condition) { 
    foobar(); 
} 
else { 
    // raise an error 
} 

Domanda stupida, lo so, ma ho fatto il mio googling e immagino che qualcuno là fuori sarebbe in grado di aiutarmi.

Grazie in anticipo!


Grazie a tutti! Se stai leggendo questo in futuro, ecco il magro:

  1. errori in Java si riferiscono a problemi che non si deve cercare di catturare

  2. eccezioni si riferiscono a errori che si consiglia di prendere.

Ecco il mio codice "fisso":

if(some_condition { 
    foobar(); 
} 
else { 
    throw new RuntimeError("Bad."); 
} 

Ho usato RuntimeError() perché, come una risposta ha sottolineato, io non devo dichiarare che sto buttando un errore in anticipo, e dal momento che Sto facendo affidamento su una condizione, è molto utile.

Grazie a tutti!

+0

http://stackoverflow.com/questions/1754315/how -to-create-custom-exceptions-in-java – Jayan

+0

Invia i risultati come risposta e contrassegnali come corretti in modo che le persone siano in grado di distinguere facilmente tra la tua domanda e la tua risposta. –

+1

Dovrebbe essere: lanciare la nuova RuntimeException ("Bad."); –

risposta

13

Qui si va:

throw new java.lang.Error("this is very bad"); 

Più idiomatica di gettare una sottoclasse di Exception. In particolare, RuntimeException è deselezionato (ad esempio, i metodi non devono dichiarare che potrebbero lanciarlo). (Bene, così è l'errore, ma dovrebbe essere riservato per cose irrecuperabili).

throw new java.lang.RuntimeException("this is not quite as bad"); 

Nota: in realtà non è necessario costruirli in quel momento. Puoi lanciare quelli pre-costruiti. Ma una cosa bella di costruirli è che registrano la linea di codice su cui si trovavano e lo stack di chiamata completo che è accaduto al momento della costruzione, e quindi costruendone uno nuovo proprio quando lo lanci, lo inietta con informazioni diagnostiche molto utili .

+0

Ottimo! Ho intenzione di darti la risposta "accettata", ma s/o @ Tim Biegeleison, che è stato anche molto utile: ^) –

5

provare a lanciare un'eccezione:

public void yourMethod() throws Exception { 
    if (some_condition) { 
     foobar(); 
    } 
    else { 
     throw new Exception("Something bad happened."); 
    } 
} 
+1

Ora mi sento stupido. Quindi le eccezioni sono errori in java (provenienti da uno sfondo pitone)? Questo spiega molto. Grazie uomo. –

+0

Non è stupido se si finisce per scrivere un buon codice Java. –

+0

Follow up (scusate se sto abusando di questo), qual è la differenza tra un errore ed ed eccezione in termini pratici? –

1

Un errore in Java è chiamato Eccezione (See this).

if(some_condition){ 
    foobar(); 
} else { 
    throw new Exception(); 
} 

Formalmente, un errore è una classe che si estende da Throwable.

La classe Throwable è la superclasse di tutti gli errori e le eccezioni in linguaggio Java. Solo gli oggetti che sono istanze di questa classe (o una delle sue sottoclassi) vengono lanciati dalla Java Virtual Machine o possono essere lanciati dall'istruzione throw di Java .Analogamente, solo questa classe o una delle sue sottoclassi può essere il tipo di argomento in una clausola catch. Per gli scopi del controllo in fase di compilazione delle eccezioni, Throwable e qualsiasi sottoclasse di Throwable che non sia anche una sottoclasse di RuntimeException o Errore sono considerati come eccezioni controllate.

...

https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html

1

Stai cercando di sollevare un errore nella unica console? O stai cercando di mostrare un errore all'utente?

In tal caso è possibile utilizzare un JOptionPane per creare una finestra di dialogo di errore.

+0

Solo console, ma grazie per il suggerimento! –

+0

@eli_dink Sure :) –

+0

@eli_dink Dai un'occhiata a questo per Errore vs Eccezione: https://stackoverflow.com/questions/5813614/what-is-difference-between-errors-and-exceptions –

1

Non c'è bisogno di sentirsi :-) muto È possibile creare la propria eccezione, ad esempio,

public class UnknownUnitException extends Exception{ 
    private String message = null; 
    public UnknownUnitException() { 
     super(); 
    } 
    public UnknownUnitException(String message) { 
     super(message); 
     this.message = message; 
    } 
    public UnknownUnitException(Throwable cause) { 
     super(cause); 
    } 
    @Override 
    public String toString() { 
     return message; 
    } 
    @Override 
    public String getMessage() { 
     return message; 
    } 
} 

mi consiglia Lesson: Exceptions at the Java Tutorials

Problemi correlati