
Checked vs unchecked
W Javie mamy dwa rodzaje wyjątków – checked oraz unchecked. Tak naprawdę dużo je nie różni – w skrócie jedne muszą być obsłużone, a drugie nie.
Checked
Wyjątki checked powstają po rozszerzeniu klasy Exception.
public class CheckedException extends Exception { }
Tak jak wspomniałem wcześniej musi on zostać obsłużony – np. przez blok try – catch:
public class Main { public static void foo(String text) throws CheckedException { if (text.length() == 0) { throw new CheckedException(); } } public static void main(String[] args) { try { foo("PABLO"); } catch (CheckedException e) { e.printStackTrace(); } } }
lub poprzez throws
public class Main { public static void foo(String text) throws CheckedException { if (text.length() == 0) { throw new CheckedException(); } } public static void main(String[] args) throws CheckedException { foo("PABLO"); } }
Unchecked
Wyjątki unchecked są tworzone poprzez rozszerzenie klasy RuntimeException.
public class UncheckedException extends RuntimeException { }
W przeciwieństwie do checked nie musza one być obsłużone – mogą one przerwać działanie aplikacji bez naszej wiedzy. 😉
public class Main { public static void foo(String text){ if (text.length() == 0) { throw new UncheckedException(); } } public static void main(String[] args) { foo("PABLO"); } }
Ale również możemy obsłużyć wyjątki unchecked:
public class Main { public static void foo(String text){ if (text.length() == 0) { throw new UncheckedException(); } } public static void main(String[] args) { try { foo("PABLO"); } catch (Exception e) { e.printStackTrace(); } } }
Więcej o wyjątkach możesz przeczytać w moim artykule o wyjątkach.