Czy przyszła Wam do głowy jedna okoliczność związana ze słowem kluczowym "throws" omawianym tutaj? Obsługa wyjątków kryje jeszcze jedną tajemnicę. Jak wspomniałem, "throws" "przerzuca" odpowiedzialność obsłużenia zgłoszonego wyjątku metodzie wywołującej. A co w przypadku gdy "main" posiada taką definicję? Jakie konsekwencje mogą z tego wyniknąć? Czytajcie dalej, a okaże się to ciekawsze od powieści kryminalnej.

OBSŁUGA WYJĄTKÓW PRZEZ FUNKCJĘ "MAIN"

Gdy poznałem zastosowanie słowa kluczowego "throws", też nie myślałem o tym w taki sposób jaki efekt może to przynieść jeżeli podstawimy to do funkcji od której się wszystko zaczyna, do funkcji "main". Któregoś dnia pozwoliłem sobie zrobić eksperyment. I jak myślicie, co się stało w przypadku wystąpienia wyjątku, przerzucenia go do "main", a funkcja "main" też postanowiła przerzucić ten wyjątek nie wiadomo w czyją stronę?

Wyskoczy komunikat?

Wyjątek zostanie zignorowany?

Wybuchnie komputer?

Hmmm...choć rzeczywiście zostawienie tego w takiej postaci jest błędem kardynalnym, to Java ochroni nas przed jakimikolwiek konsekwencjami. Sprawdźmy to sami prowokując wyjątek zgodnie z powyżej opisaną sytuacją.

KOD ŹRÓDŁOWY I PROWOKACJA WYJĄTKU

Obsługa wyjątków lubi zaskakiwać nieoczekiwanymi skutkami naszych działań. Skopiujcie sobie program! Chyba najkrótszy ze wszystkich na temat Javy:

  • KLASA "Main"
public class Main
{
	public static void main(String[] args) throws ArithmeticException
	{
		new IllegalOperation();
	}
}
  • KLASA "IllegalOperation"
public class IllegalOperation
{
	public IllegalOperation() throws ArithmeticException
	{
		int x = 12 / 0;
	}
}

Nawet z takiej rzeczy możemy wyciągnąć cenny wniosek. Zauważyliście, że konstruktory również mogą mieć klauzulę "throws"? Obsługa wyjątków pozwala na to jak najbardziej. W każdym razie, uruchomcie i zobaczcie co się stanie. Funkcja "main" nie mając komu przerzucić zgłoszonego wyjątku po prostu...zakończy program! Tak samo "brutalnie" jak w języku C byśmy dopuścili się naruszenia ochrony pamięci. Pstryk i aplikacji nie ma!

W konsoli to może być niezauważalne, aczkolwiek jakbyście programowali graficzny interfejs użytkownika (o czym też będzie mowa niedługo), spróbujcie wtedy to wywołać, a okno zamknie się Wam automatycznie "bez słowa wyjaśnienia". To akurat jedynie tytułem ciekawostki. Może to nie jest nic ekscytującego, aczkolwiek warto wiedzieć co się dzieje w sytuacji postawienia funkcji "main" w niekorzystnej sytuacji. Obsługa wyjątków nie może wtedy zostać przeprowadzona.


To było jedynie pokazanie Wam skutków ubocznych. Zaprezentowane działania są jak najbardziej karygodne i nie świadczą o Waszym profesjonalizmie. Nie próbujcie tego robić w domu

PODOBNE ARTYKUŁY