PDA

View Full Version : [JAVA]Lanciare eccezione su fallimento metodo


stefo85
21-06-2009, 09:11
ciao a tutti,
avrei la necessità di lanciare un'eccezione quando un metodo dovesse fallire.

public void registra(String m){
int le=Integer.parseInt(m);
}


Praticamente dal codice sopra vorrei aggiungere la possibilità di lanciare un'eccezione se la stringa 'm' non dovesse essere un intero, facendo quindi fallire il parseInt.
Grazie

fero86
21-06-2009, 10:40
ma giá la lanci: in quel codice non hai catturato l'eccezione unchecked NumberFormatException, che quindi se salta si propaga.

stefo85
21-06-2009, 10:59
ma giá la lanci: in quel codice non hai catturato l'eccezione unchecked NumberFormatException, che quindi se salta si propaga.
e come faccio a catturarla?
Cioè, la stringa in ingresso sarebbe un input da tastiera e io dovrei verificare se la stringa passata è un intero. Altrimenti lancio un eccezione.
Finora per gli altri controlli sull'input ho importato un'eccezione "Eccezione" fatta da me.
In questo modo:

public static void inserisci(String x)throws Eccezione{
if(x.length()!=2)
throw new Eccezione("stringa immessa diversa da 2 caratteri");
}

Vorrei lanciare un'eccezione simile anche qualora la stringa passata non dovesse essere un intero

Grazie

Thunderfox
21-06-2009, 11:03
Potresti usare un Try-Catch

public void registra(String m){
try {
int le=Integer.parseInt(m);
} catch (Exception e) {
e.printStackTrace();
}
}



Ovviamente "Exception e" viene usato per eccezioni generiche, ci dovrebbe essere anche un Eccezione apposita... ma non ne sono sicuro...

ndakota
21-06-2009, 12:35
come già detto c'è la NumberFormatException

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.String)

khelidan1980
21-06-2009, 13:31
Hai provato a complirae quel codice e/o usare un ide tipo eclipse?
Al massimo se hai bisogno di una eccezione personalizzata puoi fare il catch come ti hanno gia giustamente detto della number format exception e nel blocco catch fare il throw della tua eccezione

stefo85
21-06-2009, 13:44
Credo di aver risolto così:

public void registra(String m)throws Eccezione{
int le;
try {
le = Integer.parseInt(m);
}
catch (NumberFormatException e) {
throw new Eccezione("Il parametro non è un intero");
}

Che ne dite?

khelidan1980
21-06-2009, 14:04
magari il nome dell'eccezione dovrebbe essere un po più parlante

stefo85
21-06-2009, 14:25
Un'altra cosa..

public void registra(String m)throws Eccezione{
int le;
try {
le = Integer.parseInt(m);
}
catch (NumberFormatException e) {
throw new Eccezione("Il parametro non è un intero");
}
//altro
}

Se l'eccezione viene lanciata il resto del codice (//altro) non viene eseguito?
Questa è l'eccezione:

public class Eccezione extends Exception{

String msg;


public Eccezione(String messaggio){

super(messaggio);

msg=messaggio;

}


public String getMsg(){

return msg;

}
}


edit: considerando che non vi sono blocchi 'finally'


Grazie ancora

fero86
22-06-2009, 18:46
Che ne dite? che manca una parentesi graffa alla fine e che la variabile le non serve; scrivi cosi:

public void registra(String m)throws Eccezione{
try {
Integer.parseInt(m);
}
catch (NumberFormatException e) {
throw new Eccezione("Il parametro non è un intero");
}
}

malocchio
23-06-2009, 08:34
Un'altra cosa..

public void registra(String m)throws Eccezione{
int le;
try {
le = Integer.parseInt(m);
}
catch (NumberFormatException e) {
throw new Eccezione("Il parametro non è un intero");
}
//altro
}

Se l'eccezione viene lanciata il resto del codice (//altro) non viene eseguito?

edit: considerando che non vi sono blocchi 'finally'


Grazie ancora

No, non viene eseguito. Del resto, come immagino sai, un blocco finally verrebbe eseguito sempre, ammenoché nel blocco catch non sia presente un System.exit();