Dlaczego dwa typy wyjątków w Javie są "zaznaczone" i "niezaznaczone"? Jaki jest powód tych nazw?Dlaczego wyjątki są zaznaczone i odznaczone?
Odpowiedz
Jeśli wywołać metodę, która jest zadeklarowana rzucić sprawdzone wyjątku (takie jak IOException
), kompilator check że jesteś albo zarażenia lub stwierdzenie, że to rethrow. Podobnie, w celu wyrzucenia takiego sprawdzonego wyjątku, kompilator sprawdza, czy zadeklarowałeś go jako część podpisu metody.
Zasadniczo jest to trochę podobne do sprawdzania typu, z wyjątkiem tego, które wyjątki mogą być rzucane przez metodę.
Kompilator nie sprawdza pod kątem odznaczeń niezaznaczonych - można je więc wyrzucać dowolną metodą bez deklarowania ich.
Sprawdzane wyjątki są sprawdzane przez kompilator Java: sprawdza, czy je złapałeś lub zadeklarował w podpisie metody.
"Sprawdzone" oznacza, że musisz go złapać lub zadeklarować, że twoja metoda zgłasza go w podpisie. Użytkownicy Twojej metody muszą złapać sprawdzone wyjątki. Niespełnienie tego spowoduje błąd kompilatora.
"Niezaznaczone" oznacza, że ani ty, ani użytkownicy Twojej metody nie są zobowiązani do wychwycenia wyjątku. Nie musisz zadeklarować go w klauzuli throws w metodzie podpisu.
W najwcześniejszej inkarnacji Java wybrała pierwszą częściej niż nie.
C# powoduje, że niezaznaczone wyjątki są domyślne. Programiści Java już teraz przyjęli tę konwencję.
sprawdzone wyjątki - te wyjątki są tworzone przez użytkowników lub coś, co można określić jako IOException. Oto wyjątki business-logic. Wszystkie te muszą być zadeklarowane jako "throws xxxException" lub otoczone try-catch. Dlatego nazwa - MUSISZ sprawdzić je wyraźnie.
niesprawdzonych wyjątki - tu są wyjątki, które są głównie wewnętrzne Java Virtual Machine jak RuntimeException, StackOverFlowException i błędów. Nie powinny one być przetwarzane przez aplikację i mogą stać się nieistotne dla logiki biznesowej aplikacji. Oni nie muszą być zadeklarowane z „rzuca” lub otoczone try-catch
To jest nieprawidłowe. Użytkownicy mogą tworzyć niezaznaczone wyjątki, rozszerzając wyjątek RuntimeException. IllegalArgumentException * jest * niezaznaczonym wyjątkiem; Wyjątek SQLException to sprawdzony wyjątek. Proszę to poprawić. – duffymo
Masz rację, mój przykład był błędny, ale pomysł, który wyjaśniam, jest inny. Informacje o wyjątkach od logiki biznesowej, które mogą być podobne do wyjątku PaymentException, TranscationFailedException, itp. - przynoszą pewne znaczenie dla aplikacji biznesowej ... Deweloper może rozszerzyć wyjątek RuntimeException, ale to nie znaczy, że powinieneś to zrobić. Osobiście uważam, że to powinno zdarzać się rzadko, a ja uważam to za anty-wzór. Powinieneś być w stanie omówić wszystkie wyjątki z jasnym, łatwym do zrozumienia i niewielką liczbą wyjątków i nie ukrywać niektórych z nich dla użytkownika twojej klasy. –
Nie uważasz, że powinni to zrobić? Jaka jest twoja odpowiedź na fakt, że C# czyni niezaznaczone wyjątki domyślnym i powszechnym idiomem? I że Jawa pasuje teraz? Sugerujesz, że Anders Hejlsberg jest kiepskim projektantem języków? – duffymo
W Javie można rzucać żadnych Throwable
. Throwble ma dwie podklasy: Error
i Exception
. Po wyrzuceniu Error
wystąpił poważny problem, który często ma niewiele wspólnego z kodem. Takie wyjątki nie są sprawdzane przez kompilator i są przykładem niezerowego wyjątku .
Wyjątek ma podklasa o nazwie RuntimeException
, są to często wyjątki wskazujące na błędy w kodzie i często mogą występować w wielu miejscach w większości kodu. Przykładami są: NullPointerException
, ArrayIndexOutOfBoundsException
itp. Są one również niezaznaczone, ponieważ można zaśmiecać kod przy pomocy tych wartości.
wszystkich innych wyjątków są sprawdzane ponieważ przez kompilator i trzeba złapać lub rzucać je.
- 1. Dlaczego wyjątki Runtime "są odznaczone" w Javie?
- 2. Najczęstsze zaznaczone i niezaznaczone wyjątki Java?
- 3. Jak utworzyć zaznaczone/niezaznaczone niestandardowe wyjątki w Javie?
- 4. Włącz/wyłącz przycisk wysyłania, jeśli pole wyboru jest zaznaczone/odznaczone?
- 5. Jak zmienić wartość pola wyboru, gdy jest zaznaczone lub odznaczone?
- 6. Dlaczego nie są przechwytywane wyjątki C++?
- 7. Dlaczego wyjątki nie są propagowane przez program rozsyłający WPF Dispatcher.Invoke?
- 8. Jakie są standardowe wyjątki Scala?
- 9. Elementy pola wyboru HTML są przesyłane tylko, jeśli są zaznaczone?
- 10. Gdzie i jak obsługiwane są wyjątki sprężyny i hibernacji?
- 11. Highcharts - Jak programowo przełączanie elementów legendy i określić, które elementy są zaznaczone
- 12. Railsy: form_for checkbox ustawione na true lub false, czy pole jest zaznaczone/odznaczone
- 13. Jak sprawdzić, czy wszystkie pola wyboru są odznaczone?
- 14. ostrzec użytkownika, jeśli wszystkie pola wyboru są odznaczone
- 15. Wykryj, czy pole wyboru jest zaznaczone lub odznaczone w angularjs zmień zdarzenie
- 16. Dlaczego Grails usuwa moje wyjątki?
- 17. jquery ustawić wszystkie zaznaczone pole wyboru
- 18. Jak przesłać 0, jeśli pole wyboru jest odznaczone i przesłać 1, jeśli pole wyboru jest zaznaczone w HTML
- 19. Dlaczego musimy użyć zmiennej pośredniej dla @SuppressWarnings ("odznaczone")?
- 20. affectations i wyjątki
- 21. Konstruktorzy i wyjątki Ruby
- 22. Dlaczego Double.parseDouble (null) i Integer.parseInt (null) wyrzucają różne wyjątki?
- 23. Jak nazywasz i organizujesz wyjątki?
- 24. Wyjątki Akka Futures Wyjątki
- 25. Dlaczego Akka Streams połyka moje wyjątki?
- 26. Wyjątki: dlaczego dodawanie nawiasów zmienia coś?
- 27. Co to są sprawdzane wyjątki w języku Java/C#?
- 28. Dlaczego wyrazy Parsec są wyraźnie zaznaczone jako Tekst, ale nie ByteString?
- 29. Dlaczego wyjątki od unique_ptr destructor kończą program?
- 30. Dlaczego wyjątki AppDomain niezmiennie kończą aplikację?
Co jeszcze nazwałbyś je? Jakie jest pytanie? Tak długo, jak rozumiesz, co oznacza "sprawdzone", oznacza to, że nie jest to prawdziwe pytanie. – EJP