Klassa Exceptions pobieranie wiadomości(metoda getMessage)

0

Dzień dobry.

Chce dostawać własną wiadomość w przypadku jakiegoś wyjątku.
Utworzyłem klasę

 
public class MojWyjatek extends Exception{

	public MojWyjatek(String wiadomosc){
		
	}
	
}

oraz klasę testową:

 import java.util.Scanner;


public class Test {
	
	public static void zakresLiczby(int liczba) throws MojWyjatek{
		if(liczba < 1 || liczba > 100){
			throw new MojWyjatek("Zła liczba.");
		}
		else{
			System.out.println("Poprawna liczba.");
		}
	}

	public static void main(String[] args) {
		Scanner wejscie = new Scanner(System.in);
		System.out.print("Podaj liczbę do sprawdzenia: ");
		int liczba = wejscie.nextInt();
		try{
			zakresLiczby(liczba);
		}
		catch(MojWyjatek e){
			e.getMessage();
		}

		
		wejscie.close();
	}
}

Nie wiem co źle robię ale nie dostaję żadnej wiadomości, proszę o podpowiedz.

1

o_O
1.

    public MojWyjatek(String wiadomosc){
 
    }

I co niby z tą wiadomością zrobiłeś? Bo ani jej nigdzie nie zapisałeś ani nie przekazałeś do konstruktora klasy nadrzędnej. Brawo.
2.

        catch(MojWyjatek e){
            e.getMessage();
        }

metoda getMessage() zwraca Stringa. A ty NIC z tym stringiem nie zrobiłeś. Czego sie niby spodziewasz? To tak jakbyś napisał sobie gdzieś w kodzie

String x = "ala ma kota";

i dziwił się że po uruchomieniu programu nigdzie nie pojawił się taki napis...

0

A bo sprawdzałem coś wcześniej i zapomniałem dopisać.

public class MojWyjatek extends Exception{

	String wiadomosc = "";
	
	public MojWyjatek(String wiadomosc){
		this.wiadomosc = wiadomosc;
	}
	
}
0

No i co to niby zmienia? o_O Wg ciebie java sie domyśli że wywołując getMessage() chciałbyś dostać wartość pola "wiadomosc"? Brak mi słów.

1

Po pierwsze:

public class MojWyjatek extends Exception{
    public MojWyjatek(String wiadomosc){
        super(wiadomosc);
    }
 }

Klasa Exception posiada już odpowiedni konstruktor i potrafi robić magię z przechowaniem treści komunikatu.

Po drugie

 catch(MojWyjatek e){
            e.getMessage();
        }

To jest tzw. martwy kod, jako że informacja zwrócona przez tą metodę nie jest zapisywana do żadnej zmiennej. By uzyskać informację na konsoli musisz wywołać e.printStackTrace() względnie przekazać to co otrzymasz z metody getMessage do jakiegoś logera.

0

O dzięki właśnie przed chwilą znalazłem to rozwiązanie. Tzn. kod

System.out.print(e.getMessage());

działa poprawnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1