JavaRush /Blog Java /Random-PL /Tłumaczenie: 6 wyjątków Java, które nękają nowicjuszy w J...
profeg
Poziom 18

Tłumaczenie: 6 wyjątków Java, które nękają nowicjuszy w Javie.

Opublikowano w grupie Random-PL

6 wyjątków Java, które prześladują początkujących użytkowników Java.

(Oryginał) (Jestem nowy zarówno w Javie, jak i angielskim, więc z radością przyjmę krytykę i pomoc) Zarówno wcześniej, jak i teraz spotykam wielu nowicjuszy w Javie, którzy mają problem z kilkoma typowymi wyjątkami, które muszę jeszcze raz wyjaśnić. Uważam, że inni starsi programiści Java mają ten sam problem, próbując pomóc nowicjuszom radzić sobie z tymi wyjątkami. Dlatego napisałem ten artykuł dla własnego rozwoju. Zachęcamy do komentowania tego artykułu lub dodawania wyjątków do poniższej listy.
1. Błąd NoClassDefFound
Jest to jeden z tych wyjątków, z komunikatem w rodzaju „Wyjątek w wątku „main” NoClassDefFoundError” , z którym spotyka się większość nowych programistów Java w świecie programowania w języku Java. Początkujący pisze program, który wyświetla „Hello world!”, wchodzi do wiersza poleceń, wpisuje „java…”, naciska Enter i BAM! =). I zastanawianie się, jak sprawić, by program wypisał „Hello world!” na monitorze, zajmuje trochę czasu. Błąd NoClassDefFoundError występuje, gdy wirtualna maszyna Java (JVM) próbuje uzyskać dostęp do klasy podczas uruchamiania, ale klasa nie zostaje znaleziona, mimo że została znaleziona w czasie kompilacji. Najczęściej ten wyjątek występuje podczas próby wykonania programu za pomocą polecenia „java”, a ścieżka klasy nie jest ustawiona poprawnie. Poniżej znajduje się opis powodów wystąpienia tego wyjątku.
  • Klasa nie jest dostępna w -classpath.
  • Zmienna środowiskowa CLASSPATH została nadpisana. Możesz sprawdzić jego obecność i poprawność za pomocą polecenia Windows „ustaw”.
Rozwiązanie problemu opisano bardziej szczegółowo tutaj.
Co więcej, musisz zrozumieć różnicę pomiędzy zmienną środowiskową CLASSPATH a kluczem interpretera -classpath. Profesjonaliści nie zalecają używania CLASSPATH. Najlepszym sposobem jest przekazanie klucza -classpath do interpretera.
2. Wyjątek ClassNotFound
ClassNotFoundException to kolejny wyjątek, który staje się koszmarem dla nowicjusza, gdy tylko zaczyna programować. Co ciekawe, przeciętny programista Java często myli wyjątki ClassNotFoundException i NoClassDefFoundError . I tym samym różnica pomiędzy tymi dwoma wyjątkami pozostaje jednym z najczęściej zadawanych pytań podczas rozmów kwalifikacyjnych na stanowisko Junior . Wyjątek ClassNotFoundException występuje, gdy maszyna JVM próbuje załadować określoną klasę i nie znajduje jej w ścieżce klasy. Jednym z częstych miejsc, w których nowy programista Java spotyka się z nim po raz pierwszy, jest połączenie się z bazą danych za pomocą biblioteki JDBC. Tam spróbujemy załadować sterownik za pomocą kodu takiego jak Class.forName("JDBCdriver"). Dobry artykuł na temat wyjątku ClassNotFoundException znajduje się tutaj . Próba zrozumienia koncepcji modułów ładujących klasy Java jest najskuteczniejszą metodą poradzenia sobie z tym problemem. Możesz przeczytać jak skonfigurować ścieżkę klas Java w środowisku Win/Unix . Jak stwierdzono w dokumentach Java , wyjątek występuje w następujących przypadkach:
  • Próbujesz załadować klasę przy użyciu metody Class.forName, ale pliku .class nie ma w ścieżce klasy. Jest to najczęstszy scenariusz z trzech wymienionych tutaj.
  • Gdy moduł ładujący klasy próbuje załadować klasę przy użyciu metody LoadClass.
  • Gdy moduł ładujący klasy próbuje załadować klasę za pomocą findSystemClass.
3. Wyjątek NullPointer
Ten wyjątek jest łatwiejszy do zrozumienia dla początkujących niż dwa pierwsze. Co więcej, wyjątek ten można łatwo zidentyfikować, ponieważ gdy to nastąpi, komunikat o wyjątku wskazuje numer linii w programie, w której wystąpił. Ten wyjątek występuje, gdy maszyna JVM próbuje uzyskać dostęp do obiektu lub próbuje wywołać metodę na obiekcie i zamiast odniesienia do obiektu otrzymuje wartość null. Dokument Java podaje również następujące powody:
  • Dostęp lub zmiana metody na obiekcie, który jest nieprawidłowy. (tj. zamiast odniesienia do obiektu JVM otrzymuje wartość null)
  • Pobieranie długości tablicy, gdy jest ona niepoprawna. (na przykład nie zainicjowany)
  • Podjęto próbę dostępu do nieistniejącego elementu tablicy typu Object. (tzn. gdy zamiast odniesienia do obiektu element tablicy zawiera wartość null)
Najprostszą metodą uniknięcia tego wyjątku jest użycie kontroli innej niż NULL. Jednak prędzej czy później stanie się to praktyką programistyczną w Javie i wszędzie znajdziesz kontrole o wartości innej niż NULL.Co ciekawe, wstawianie wszędzie kontroli o wartości innej niż NULL nie jest uważane za dobry styl programowania . Głównym powodem stosowania sprawdzania wartości innych niż NULL jest to, że programista chce przekazać obiekt zerowy w przypadku niepowodzenia lub błędu. Zamiast tego dobrą praktyką programistyczną jest to, że programiści powinni zwracać pusty obiekt, a nie wartość null , co jest podstawową logiką określającą zachowanie programu w przypadku błędu. Jednak przyjęcie tej praktyki programistycznej jest trudniejsze niż się wydaje.
W naszym zasobie znajduje się dobry artykuł na ten temat .
4. Wyjątek ClassCast
Jest to kolejny wyjątek znany początkującym, który ma miejsce podczas próby rzutowania obiektu na klasę, która nie jest jej podklasą. Ponownie jest to dość łatwe do zrozumienia, zidentyfikowania i proste do naprawienia. Jednym ze sposobów uniknięcia tego wyjątku, gdy typ obiektu jest nieznany w czasie wykonywania, jest użycie „InstanceOf” w celu sprawdzenia, czy obiekt jest instancją określonej klasy.
5. Wyjątek ArrayIndexOutOfBoundsException
Ten wyjątek jest oczywisty i występuje, gdy maszyna JVM próbuje uzyskać dostęp do elementu tablicy z nieistniejącym indeksem, na przykład ujemnym (-1) lub większym lub równym rozmiarowi tablicy. Jest to dość łatwe do zrozumienia, zdefiniowania i poprawienia . Przykładowo podczas tworzenia pętli for (i = 0; i <= cmd_stack.length; i++) System.out.println(cmd_stack[i]); pojawia się wyjątek, ponieważ w tablicy indeksy zaczynają się od 0, a metoda długości zwraca liczbę elementów, a liczba ta jest o 1 większa od wartości ostatniego indeksu. Prawidłowe użycie for (i = 0; i < cmd_stack.length; i++) System.out.println(cmd_stack[i]);
6. Wyjątek IllegalArgument
Ten wyjątek jest mniej powszechny i ​​​​dość łatwy do zrozumienia, zidentyfikowania i rozwiązania. Występuje, gdy maszyna JVM próbuje wywołać nieistniejącą metodę lub metodę z nieprawidłowym argumentem.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION