Jak mówi Bill K. Sprawdzone wyjątki są łatwe. Jeśli twój edytor IDE/program nie daje szybkiego sposobu na zobaczenie metody javadocs lub podpisów, musisz go wyrzucić. Poważnie.
Niezaznaczonymi wyjątkami są inne czajniki ryb. Ale myślę, że najlepszą strategią z niezaznaczonymi wyjątkami jest nie próbować ich złapać. Zamiast tego piszesz kod, aby uniknąć rzucania go w pierwszej kolejności. Na przykład;
// ... not sure if 'obj' is null
if (obj != null) {
obj.someMethod();
}
// ... not sure if 'obj' has the right type
if (obj instanceof Foo) {
Foo foo = (Foo) obj;
}
// ... not sure if 'i' is in range
if (i >= 0 && i < array.length) {
.... = array[i];
}
Oto dlaczego Polecam:
- Test osłona jest rzędy wielkości bardziej wydajne niż rzucanie i łapanie wyjątek.
- Test wartownika jest bardziej czytelny ... mniej linii kodu.
- Jeśli zauważysz niesprawdzony wyjątek, nigdy nie możesz być pewien, że stało się tak z powodów, które Twoim zdaniem tak się stało; na przykład:
// obj might be null ...
try {
obj.doSomething();
} catch (NullPointerException ex) {
System.err.println("obj was null"); // WRONG!!!
// the NPE could have happen inside doSomething()
}
- Jeśli zaznaczona jest wyjątek spowodowany przez błąd, to chcę StackTrace oraz (w zależności od aplikacji) może nie chcieć odzyskać.
Oczywiście obejmuje tylko te kontrole "strażnicze", w których zrozumienie kodu mówi, że są one niezbędne! Tak więc, na przykład, jeśli znasz, że "obj" powinno mieć wartość inną niż null, a "i" powinno znajdować się w zasięgu, dobrym pomysłem jest pozostawienie czeków. Jeśli pominiesz jeden test za dużo, dostaniesz wyjątek ... ale to dobrze, ponieważ możesz wtedy użyć stacktrace, aby dowiedzieć się, dlaczego twoje zrozumienie kodu było błędne, i być może naprawić podstawowy błąd.
Nie jest to prawda dla sprawdzonych wyjątków, metoda określa, jakie wyjątki może rzutować. Dla wszystkich innych (np. NPE) - cóż, jest powód, dla którego nie są zaznaczone. – Gandalf
Możesz użyć BCEL lub ASM do parsowania plików binarnych i powtórzyć kod w każdej metodzie, aby znaleźć odpowiedź. –