2009-08-11 16 views
24

O ile rozumiem, nie ma sposobu, aby dowiedzieć się, jakie wyjątki rzuca metoda, nie przeglądając dokumentacji API jeden po drugim.Najczęstsze zaznaczone i niezaznaczone wyjątki Java?

Ponieważ ma opcji, chciałbym odwrócić badań i poprosi, które są najczęstszymi Wyjątki i RuntimeExceptions natrafiłem gdy mamy do czynienia z:

  • Casting
  • tablic
  • Vector, ArrayList, HashMap itp
  • IO (klasa plików, strumieni, filtry, ...)
  • obiektu serializacji
  • Nitki (wait(), sleep(), itd.)
  • lub cokolwiek innego, co jest uważane za „Basic Java”

Zdaję sobie sprawę, że może to być subiektywne i nudny, ale jest to dla testu klasy i Naprawdę nie wiem lepiej.

+1

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

+0

Możesz użyć BCEL lub ASM do parsowania plików binarnych i powtórzyć kod w każdej metodzie, aby znaleźć odpowiedź. –

Odpowiedz

30

Załóżmy, że poniżej java.lang chyba że określono inaczej:

  • Casting: ClassCastException
  • Tablice: ArrayIndexOutOfBoundsException, NullPointerException
  • Kolekcje: NullPointerExcep cja, ClassCastException (jeśli nie używasz autoboxing i przykręcić ją do góry)
  • IO: java.io.IOException, java.io.FileNotFoundException, java.io.EOFException
  • serializacji: Java. io.ObjectStreamException (jej podklasy, którego jestem zbyt leniwy, aby wyliczyć)
  • wątki: InterruptedException, SecurityException, IllegalThreadStateException
  • Potencjalnie wspólne dla wszystkich sytuacjach: NullPointerException, IllegalArgumentException

byś dobrze zajrzeć do stron podsumowania paczki strony Java. Oto jeden: http://java.sun.com/j2se/1.4.2/docs/api/java/io/package-summary.html

+0

Nigdy nie zdawałem sobie sprawy, że istnieje tam "podsumowanie wyjątków". Dzięki! –

+0

(Edytowany, aby umożliwić odczyt listy wyjątków) Nie ma problemu, odkryłem to sam przez przypadek. Jak wspaniałe jest to, że "kiedy się naucza, dwoje się uczy", co? Przepraszam za bycie trochę snippy wcześniej, będę edytować, aby to naprawić wkrótce. –

+0

Witam, po prostu wypróbowałem link zamieszczony powyżej w podsumowaniu paczki, nie rozwiązuje się, czy ktoś zna nową lokalizację? – Sizons

15

NullPointerException

+2

Być może najlepiej jedno słowo odpowiedź na SO. – Azim

1

Sprawdzone wyjątkami są łatwe, edytor powinien wyświetlić Javadocs po najechaniu/zakończyć nazwę metody.

Niezaznaczone są zazwyczaj rzeczywistymi błędami i nie są nawet w javadocs częściej niż nie. Domyślam się, że najbardziej powszechnym może być IllegalArgumentException, każda metoda, która ma jakąkolwiek możliwą kombinację niepoprawnych parametrów, powinna go wyrzucić.

+0

Jeśli używa edytora tekstowego, nie wyświetli koniecznie javadocs na temat uzupełniania nazwy metody. :-( –

+0

Myślę, że masz na myśli wyjątek IllegalArgumentException –

+4

Nie używaj edytora tekstów (Zaufaj mi, robiłem to od dziesięcioleci) To jak wypuszczenie powietrza z opon rowerowych, ponieważ potrzebujesz więcej ćwiczeń –

1

Jak o poszukiwaniu podklas java.lang.Exception np here

Osobiście używam 2 sprawdzone wyjątki własnego TransientException dla przypadków, gdy ponawiania może działać. I InvalidRequestException dla błędów sprawdzania poprawności.

3

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.

+0

Bardzo dokładna odpowiedź. –

7

java.język:

  1. ArithmeticException
  2. ArrayIndexOutOfBoundsException
  3. ClassCastException
  4. ClassNotFoundException
  5. CloneNotSupportedException
  6. IllegalArgumentExcepion
  7. IllegalMonitorStateException
  8. IllegalThreadStateExc eption
  9. IndexOutOfBoundsException
  10. InterruptedException
  11. NullPointerException
  12. NumberFormatedException

java.util:

  1. ConcurrentModificationException

java.io:

  1. EOFException
  2. FileNotFoundException
  3. IOException
  4. NotSerializableException
0
  • odlewnicze - ClassCastException

  • Tablice - ArrayIndexOutOfBoundsException

  • Vector, ArrayList, HashMap, itd. - Rzadko zobaczyć wyjątki podczas pracy z kolekcji Java, ale bardzo sporadycznie ConcurrentModificationException

  • IO (klasa plików, strumieni, filtry, ...) - FileNotFoundException

  • obiektu serializacji - ClassNotFoundException

  • Nitki (wait(), sleep(), itd.) - W moim experie nce, zwykle problemy z wątkami pojawiają się w sposób losowy, który nie jest specyficzny dla wyjątków. Zajmowanie się InterruptedException zajmuje dużo czasu, choć nie widziałem, aby wyjątek był rzucany w znacznym stopniu.

  • lub cokolwiek innego, co jest uważane za "podstawową Javę" - zdecydowanie najczęstszym wyjątkiem z mojego doświadczenia jest wyjątek NullPointerException.

11

Nieograniczony listy wyjątków
ArrayIndexOutOfBoundsException
ClassCastException
IllegalArgumentException
IllegalStateException
NullPointerException
NumberFormatException
AssertionError
ExceptionInInitializerError
StackOverflowError
NoClassDefFoundError

sprawdzone listy wyjątków
Wyjątek
IOException
FileNotFoundException
ParseException
ClassNotFoundException
CloneNotSupportedException
InstantiationException
InterruptedException
NoSuchMethodException
NoSuchFieldException

Powiązane problemy