Dlaczego NullPointerException nie jest zadeklarowany jako wyjątek sprawdzony
To było pytanie zadane w wywiadzie. NullPointerException
jest bardzo często; dlaczego nie jest zadeklarowany jako zaznaczony wyjątek? Wygooglowałem, ale nie dostałem prawidłowej odpowiedzi.
9 answers
Prawie każda metoda musiałaby zadeklarować rzucanie go.
public void myMethod(String param) throws NullPointerException {
//
}
(jako notatka boczna-na przykład Eclipse wyświetla ostrzeżenie za każdym razem, gdy istnieje "potencjalny dostęp do wskaźnika null", dzięki czemu można zapobiec wyjątkowi tak wcześnie, jak to możliwe.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-21 14:54:00
Nie jest to sprawdzony wyjątek (między innymi) , ponieważ jest niezwykle powszechny. Może wystąpić praktycznie wszędzie. Je ¶ li zosta3o sprawdzone, to prawie ka ¿da metoda w ka ¿dym programie Java gdziekolwiek musia3aby zadeklarowaæ, ¿e jest ona throws NullPointerException
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-21 14:49:45
Wyjątki wskaźnika Null są rozszerzeniami WYJĄTKÓW Runtime i dlatego są nieoczekiwanymi zdarzeniami w przepływie programu. Nie ma sensu oczekiwać, że wyjątek ze wskaźnikiem null zostanie wyrzucony (mam nadzieję!) i dlatego nigdy nie zadeklarowałbyś tego jako wyjątku sprawdzonego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-21 14:49:32
Odpowiedź w jednym zdaniu jest taka, że jest to wynik błędu programowania, a wyjątki błędu programowania nie są wyjątkami sprawdzonymi (IllegalStateException, ClassCastException, itp.).
Ale nawet jeśli miałbyś argument, dlaczego może to być sprawdzony wyjątek, w zasadzie każda operacja na referencji obiektu może go wyrzucić, więc byłoby to wszędzie i dosłownie każda metoda w nietrywialnym programie musiałaby go wyrzucić - więc co by było punkt?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-21 14:49:59
Zaznaczone wyjątki mogą wystąpić, ponieważ coś w środowisku , nad którym twój program ma niewielką lub żadną kontrolę, poszło nie tak (np. IOException
, SQLException
). Możesz to przewidzieć i zająć się tą sprawą.
A NullPointerException
(zwykle) występuje, ponieważ w Twoim kodzie jest jakiś błąd. Jeśli oczekujesz wyrzucenia wyjątku NullPointerException, poprawnym rozwiązaniem jest naprawienie błędu zamiast obsługi wyjątku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-21 15:01:09
Moja własna obowiązkowa definicja dla sprawdzonego wyjątku. Wyjątki zaznaczone to wyjątki, które wywołałoby API w przypadku wystąpienia znanej niepożądanej sytuacji
NullPointerException
s nie wskazuje na" znaną niepożądaną " sytuację. Zamiast tego, są one zazwyczaj wyrzucane z powodu pewnych nieprzewidzianych sytuacji w kodzie. Oznacza to, że są one w większości przypadków z powodu złych praktyk kodowania-takich jak próba uzyskania rozmiaru listy, która nie jest prawidłowo zainicjowana itp. Nie ma więc sensu ich sprawdzać wyjątki - jak każdy obiekt w Javie może być null w pewnym momencie?!. NullPoitnerException też nigdy nie powinien być przechwytywany.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-21 14:50:29
Zaznaczone wyjątki są tylko dla wyjątków, w których program może odzyskać. Wywołanie czegoś na obiekcie NULL jest problemem programistów i nie można go odzyskać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-10 19:06:13
Po co ją włączać, skoro każda funkcja, którą piszesz, będzie musiała ją zadeklarować ? Żeby ułatwić Ci życie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-23 12:36:50
Jeśli wystąpi wyjątek wskaźnika Null, Twój proram zatrzyma się.Stąd jest to wyjątek uchecked.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-06 16:48:03