Najpierw dam wam przykład (ale na samym końcu znajduje się odpowiedź na pytanie, dlaczego kontrowersje).
Przypuśćmy, że edytujesz dokument w edytorze dokumentów opartym na Javie, a po zakończeniu wybierz Plik-> Zapisz jako ... i zdecydowałeś się zapisać dokument na wolumin, na którym nie masz uprawnień do zapisu. Edytor nie zawiesiłby się na tobie z brzydkim śledzeniem stosu, po prostu powiedziałby ci, że nie może zapisać pliku i pozwoli ci kontynuować edycję i / lub zapisać w innej lokalizacji.
W takim przypadku prawdopodobnie sprawdzono wyjątek, który został złapany i podjął działania, aby łaskawie go wyleczyć.
Z drugiej strony, załóżmy, że dzielenie przez zero lub zerowy wskaźnik wyjątku spowodowany błędem programowania, który powoduje, że jego brzydka głowa pojawia się tylko w określonych warunkach. Może się to zdarzyć w dowolnym miejscu w kodzie, pamięć RAM może zostać uszkodzona itp. Żaden dokument API nie powiedziałby, że „ta metoda spowodowałaby podział przez zero, jeśli pamięć RAM jest uszkodzona” .
Sprawdzone wyjątki powinny być częścią projektu, a użytkownicy tego interfejsu API powinni przygotować się na ich obsługę. Niesprawdzone wyjątki mogą zdarzyć się prawie wszędzie i są poza naszą kontrolą.
Kontrowersje powstają od programistów stosujących niesprawdzone wyjątki (od RuntimeException), kiedy powinni używać sprawdzonych wyjątków:
- jako skrót, aby kompilator nie przeszkadzał
- aby ich podpisy wyglądały na prostsze
- ponieważ uważają, że sprawdzone wyjątki są kwestią zależności (jeśli rzucisz nowy sprawdzony wyjątek w klasie implementującej, powinieneś zmodyfikować podpis interfejsu) i viceversa.