30 najlepszych pytań i odpowiedzi dotyczących obsługi wyjątków [dla początkujących i doświadczonych]
Opublikowany: 2020-09-29Obsługa wyjątków to koncepcja zaimplementowana w algorytmach do obsługi ewentualnych błędów w czasie wykonywania, które mogą zakłócać normalny przepływ programu. Niektóre z błędów, które można rozwiązać za pomocą tej koncepcji, to:
- Klasa nie znaleziono wyjątku
- IOException
- SQLException
- Zdalny wyjątek
- Wyjątek czasu wykonania:
- Wyjątek arytmetyczny
- NullPointerException
- NumberFormatException
- IndexOutOfBoundsException
- ArrayIndexOutOfBoundsException
- StringIndexOutOfBoundsException
Zaletą tej implementacji jest zapobieganie awariom programu, jeśli wystąpi wyjątek podczas wykonywania programu. Bez obsługi wyjątków program zgłosi błąd, gdy napotka wyjątek, a reszta programu nie zostanie wykonana. Jednak wdrożenie tej koncepcji zapewni obejście, w którym reszta programu jest wykonywana, jeśli są one niezależne w odniesieniu do poniesionego wyjątku. Aby dowiedzieć się więcej, zapoznaj się z naszymi kursami z analizy danych.
Przeczytaj: Musisz przeczytać 30 pytań i odpowiedzi na wywiad z selenem: Najlepszy przewodnik
Pytania i odpowiedzi dotyczące obsługi wyjątków podczas rozmowy kwalifikacyjnej
1. Co rozumiesz przez wyjątek?
Jest to nienormalny stan, który czasami występuje podczas wykonywania programu. Zakłóca normalny przebieg programu. Należy obsłużyć ten wyjątek; w przeciwnym razie może spowodować nagłe zakończenie programu.
2. Wyjaśnij, jak można obsługiwać wyjątki w Javie. Jaki jest mechanizm obsługi wyjątków w tym procesie?

Mechanizm obsługi wyjątków składa się z trzech części. Są to tak zwane:
- Try block: sekcja kodu, która jest najpierw próbowana do wykonania i monitorowana pod kątem wszelkich wyjątków, które mogą wystąpić.
- Przechwyć blok: jeśli jakikolwiek wyjątek zostanie zgłoszony przez blok „try”, zostanie przechwycony przez tę sekcję kodu.
- Wreszcie blok: Kod w tej sekcji jest zawsze wykonywany niezależnie od wyjątków przechwyconych w bloku „try”, jeśli takie istnieją. Nawet jeśli nie ma wyjątku, kod pod tym blokiem zostanie wykonany.
3. Czy można trzymać inne zdania pomiędzy blokami „try”, „catch” i „finally”?
Nie zaleca się umieszczania żadnych stwierdzeń między sekcjami bloki „try”, „catch” i „finally”, ponieważ tworzą jedną całość mechanizmu obsługi wyjątków.
próbować
{
//Kod monitorowany pod kątem wyjątków.
}
//Nie możesz trzymać tutaj oświadczeń
złapać (wyjątek ex)
{
//Złap wyjątki zgłoszone przez try block, jeśli takie istnieją.
}
//Nie możesz trzymać tutaj oświadczeń
wreszcie
{
//Ten blok jest zawsze wykonywany niezależnie od wyjątków.
}
4. Czy będzie można dodać tylko blok „try” bez bloków „catch” i „finally”?
Dałoby to błąd kompilacji. Konieczne jest, aby po bloku „try” następował blok „catch” lub „finally”, jeśli nie oba. Potrzebny jest jeden z bloków „catch” lub „finally”, aby przepływ obsługi wyjątków był niezakłócony.
5. Czy będzie możliwe zachowanie wyciągów po bloku 'finally', jeśli kontrola powraca z samego bloku final?
Spowoduje to błąd nieosiągalnego bloku catch. Dzieje się tak, ponieważ formant będzie wracał z samego bloku „finally”. Kompilator nie wykona kodu po wierszu z wyjątkiem. Dlatego wykonanie pokaże nieosiągalny błąd kodu.
Marzysz o studiowaniu za granicą? Oto odpowiedni program dla Ciebie6. Wyjaśnij błąd nieosiągalnego bloku przechwytującego.
W przypadku wielu bloków catch, kolejność umieszczania bloków catch jest od najbardziej szczegółowej do najbardziej ogólnej. Oznacza to, że podklasy wyjątku powinny być pierwsze, a następnie nadejdą superklasy. W przypadku, gdy superklasy są utrzymywane jako pierwsze, a za nimi podklasy, kompilator pokaże nieosiągalny błąd bloku catch.
Klasa publiczna Obsługa wyjątków
{
public static void main(String[] args)
{
próbować
{
int i = Integer.parseInt("test");
//Ta instrukcja zgłosi wyjątek NumberFormatException //ponieważ podane dane wejściowe to łańcuch, a //określony format jest liczbą całkowitą.
}
złapać (wyjątek ex)
{
System.out.println("Ten blok obsługuje wszystkie typy wyjątków");
//W tym //bloku mogą być obsługiwane wszystkie rodzaje wyjątków, ponieważ jest to superklasa wyjątków.
}
catch(NumberFormatException ex)
{
//To da błąd w czasie kompilacji
//Ten blok stanie się niedostępny, ponieważ
//wyjątek zostałby już przechwycony przez powyższy //blok catch
}
}
}
7. Rozważ trzy instrukcje w bloku try: instrukcja1, instrukcja2 i instrukcja3. Po nim następuje blok „catch”, aby przechwycić wyjątki, które wystąpiły podczas wykonywania bloku „try”. Załóżmy, że wyjątek został zgłoszony w instrukcji2. Czy uważasz, że oświadczenie3 zostanie wykonane?
Oświadczenie3 nie zostanie wykonane. Jeśli wyjątek zostanie zgłoszony przez blok „try” w dowolnym momencie, pozostały kod po wyjątku nie zostanie wykonany. Zamiast tego kontrola przepływu przejdzie bezpośrednio do bloku „catch”.
8. Rozróżnij błąd i wyjątek w Javie.
Kluczową różnicą między błędem a wyjątkiem jest to, że podczas gdy błąd jest spowodowany przez środowisko, w którym działa JVM (Java Virtual Machine), wyjątki są powodowane przez sam program. Na przykład OutOfMemory to błąd, który występuje, gdy maszyna JVM wyczerpuje swoją pamięć.
Ale NullPointerException to wyjątek, który występuje, gdy program próbuje uzyskać dostęp do obiektu o wartości null. Naprawa po błędzie nie jest możliwa. Dlatego jedynym rozwiązaniem błędu jest przerwanie wykonywania. Jednak możliwe jest obejście wyjątków za pomocą bloków try and catch lub przez zgłaszanie wyjątków z powrotem do funkcji wywołującej.
Koniecznie przeczytaj: Pytania i odpowiedzi dotyczące wywiadu w języku Java
9. Jakie są rodzaje wyjątków? Wyjaśnij je.
Istnieją dwa rodzaje wyjątków:
Sprawdzone wyjątki
Typ wyjątków, które są znane i rozpoznawane przez kompilator. Te wyjątki można sprawdzić tylko w czasie kompilacji. Dlatego są one również nazywane wyjątkami czasu kompilacji. Można je obsłużyć za pomocą bloków try and catch lub za pomocą klauzuli throw. Jeśli te wyjątki nie są odpowiednio obsługiwane, spowodują błędy w czasie kompilacji. Przykłady obejmują podklasy java.lang.Exception z wyjątkiem RunTimeException.
Niesprawdzone wyjątki
Typ wyjątków, które nie są rozpoznawane przez kompilator. Występują tylko w czasie wykonywania. Dlatego są one również nazywane wyjątkami czasu wykonywania. Nie są sprawdzane w czasie kompilacji. Dlatego nawet po udanej kompilacji mogą spowodować przedwczesne zakończenie programu, jeśli nie zostaną odpowiednio obsłużone. Przykładami są podklasy java.lang.RunTimeException i java.lang.Error.
10. Jaka jest hierarchia wyjątków w Javie?
Java.lang.Throwable to superklasa wszystkich błędów i wyjątków w Javie. Ta klasa jest rozszerzeniem klasy java.lang.Object. Argument bloku catch powinien być tylko jego typem lub typem podklasy. Klasa Throwable obejmuje dwie podklasy:
- java.lang.Error : To jest super klasa dla wszystkich typów błędów w Javie. Typowe błędy zawarte w tym dokumencie to:
- java.lang.VirtualMachineError: Pod tym –
- Błąd przepełnienia stosu
- Błąd brak pamięci
- java.lang.AssertionError
- java.lang.LinkageError: Pod tym –
- NoClassDefFoundBłąd
- Błąd niezgodności zmiany klasy
- java.lang.VirtualMachineError: Pod tym –
- java.lang.Exception: Jest to superklasa wszystkich typów wyjątków w Javie. Typowe wyjątki w tym zakresie to:
- RunTimeException
- Wyjątek arytmetyczny
- NumberFormatException
- NullPointerException
- ArrayIndexOutOfBoundsException
- ClassCastException
- java.lang.InterruptedException
- java.lang.IOException
- java.lang.SQLException
- java.lang.ParseException
- RunTimeException
11. Czym są wyjątki wykonawcze w Javie? Podaj kilka przykładów.
Wyjątki występujące w czasie wykonywania są nazywane wyjątkami czasu wykonywania. Kompilator nie może rozpoznać tych wyjątków, takich jak niesprawdzone wyjątki. Zawiera wszystkie podklasy java.lang.RunTimeException i java.lang.Error. Przykłady obejmują NumberFormatException, NullPointerException, ClassCastException, ArrayIndexOutOfBoundException, StackOverflowError itp.
12. Zdefiniuj OutOfMemoryError w Javie.
Jest to podklasa java.lang.Error, która pojawia się, gdy w JVM zabraknie pamięci.
13. Rozróżnij NoClassDefFoundError i ClassNotFoundException w Javie.
Zarówno NoClassDefFoundError, jak i ClassNotFoundException występują, gdy określona klasa nie zostanie znaleziona w czasie wykonywania. Występują jednak w różnych scenariuszach. NoClassDefFoundError występuje, gdy wystąpi błąd, ponieważ określona klasa była obecna w czasie kompilacji, ale jej brakowało w czasie wykonywania. ClassNotFoundException występuje w przypadku napotkania wyjątku dla aplikacji próbującej załadować klasę w czasie wykonywania, która nie jest aktualizowana w ścieżce klasy.
14. Czy blok 'finally' jest wykonywany, jeśli któryś z bloków 'try' lub 'catch' zwraca kontrolę?
Blok „finally” jest zawsze wykonywany niezależnie od tego, czy bloki try czy catch zwracają kontrolę, czy nie.
15. Czy można ręcznie zgłosić wyjątek? Jeśli tak, wyjaśnij, jak.

Możliwe jest ręczne zgłoszenie wyjątku. Odbywa się to za pomocą słowa kluczowego „rzut”. Składnia ręcznego zgłaszania wyjątków to
throw InstanceOfThrowableType;
Oto przykład użycia słowa kluczowego „throw” do ręcznego zgłoszenia wyjątku.
próbować
{
NumberFormatException ex = new NumberFormatException(); //Tutaj tworzymy jawnie obiekt dla NumberFormatException
rzut ex; //rzucanie obiektu NumberFormatException jawnie przy użyciu słowa kluczowego throw
}
catch(NumberFormatException ex)
{
System.out.println("W tym bloku można przechwycić jawnie zgłoszony obiekt NumberFormatException.");
}
Przeczytaj: Top 35 pytań i odpowiedzi do wywiadu wiosennego: ostateczny przewodnik
16. Co masz na myśli przez ponowne zgłaszanie wyjątku w Javie?
Wyjątki zgłoszone w bloku „try” są obsługiwane w bloku „catch”. Jeśli blok „catch” nie jest w stanie obsłużyć tego wyjątku, możliwe, że może ponownie zgłosić ten sam wyjątek za pomocą słowa kluczowego „throw”. Ten mechanizm nazywa się ponownym zgłaszaniem wyjątku. Realizacja wygląda następująco:
próbować
{
Ciąg s = null;
System.out.println(s.length()); //Ta instrukcja zgłasza wyjątek NullPointerException
}
catch(NullPointerException ex)
{
System.out.println("Tutaj przechwycono wyjątek NullPointerException");
rzut ex; //Ponowne zgłaszanie wyjątku NullPointerException
}
17. Dlaczego używasz słowa kluczowego „rzuty” w Javie?
Jeśli jest możliwe, aby metoda zgłosiła wyjątek, jeśli nie mógł być obsłużony, należy określić ten wyjątek za pomocą słowa kluczowego „throws”. Będzie to pomocne dla funkcji wywołujących tej metody w obsłudze tego wyjątku. Składnia użycia słowa kluczowego „rzuca” to:
return_type nazwa_metody(lista_parametrów) wyrzuca listę_wyjątków
{
//kod
}
Tutaj lista_wyjątków jest listą wyjątków, które mogą zostać zgłoszone przez tę metodę. Te wyjątki należy oddzielić przecinkami. Przykładowy kod :
Klasa publiczna Obsługa wyjątków
{
public static void main(String[] args)
{
próbować
{
metodaZrzutami();
}
catch(NullPointerException ex)
{
System.out.println("NullPointerException zgłoszony przez metodę methodWithThrows() zostanie przechwycony tutaj");
}
}
static void methodWithThrows() wyrzuca NullPointerException
{
Ciąg s = null;
System.out.println(s.length()); //Ta instrukcja wyrzuca NullPointerException
}
}
18. Często zaleca się prowadzenie operacji czyszczenia, takich jak zamykanie zasobów DB wewnątrz bloku „finally”. Dlaczego jest to konieczne?
Blok „finally” jest zawsze wykonywany niezależnie od tego, czy wyjątki zostały zgłoszone w bloku „try” lub czy zgłoszone wyjątki zostały przechwycone w bloku „catch”, czy nie. Utrzymywanie operacji czyszczenia w bloku „finally” zapewnia działanie tych operacji w każdym przypadku i nie będą miały na nie wpływu wyjątki, które mogą, ale nie muszą, wzrosnąć.
19. Jak odróżniłbyś finalne, finalne od finalizacji w Javie?
Po pierwsze, „final” to słowo kluczowe, którego można użyć, aby zmienić zmienną, metodę lub klasę. Mówiąc prościej, jeśli zmienna jest zadeklarowana jako ostateczna, po jej zainicjowaniu nie można zmienić jej wartości. Jeśli metoda jest zadeklarowana jako ostateczna, nie można jej zastąpić ani zmodyfikować w klasie podrzędnej. Jeśli klasa jest zadeklarowana jako ostateczna, nie można jej rozszerzyć na kolejne klasy.
Po drugie, „finally” to blok używany w obsłudze wyjątków wraz z blokami „try” i „catch”. Ten blok jest zawsze wykonywany niezależnie od zgłoszonego wyjątku lub jeśli zgłoszony wyjątek jest obsługiwany. Zwykle ten blok jest używany do wykonywania operacji czyszczenia w celu zamknięcia zasobów, takich jak połączenie z bazą danych, zasoby we/wy itp.
Po trzecie, metoda finalize() jest metodą chronioną. Należy do klasy java.lang.Object. Każda klasa stworzona w Javie dziedziczy tę metodę. Wątek modułu odśmiecania pamięci wywołuje tę metodę przed usunięciem obiektu z pamięci. Zanim obiekt zostanie usunięty z pamięci, ta metoda jest używana do wykonania niektórych operacji czyszczenia.
protected void finalize() rzuca Throwable
{
//Oczyszczanie operacji
}
20. Czym są niestandardowe wyjątki w javie?
Klasy wyjątków można zgłaszać w Javie zgodnie z wymaganiami przepływu programu. Te wyjątki są nazywane wyjątkami zdefiniowanymi przez użytkownika. Nazywa się je również niestandardowymi wyjątkami. Te wyjątki muszą rozszerzać dowolną klasę w hierarchii wyjątków.
21. Jak wyjaśnilibyście wyjątek ClassCastException w Javie?
Ten wyjątek jest zgłaszany, gdy maszyna JVM nie może rzutować obiektu jednego typu na inny typ. Jest to wyjątek RunTimeException.
22. Rozróżnij rzuty, rzuty i rzuty w Javie.
Po pierwsze, słowo kluczowe „throw” służy do ręcznego zgłaszania wyjątku w Javie. Za pomocą tego słowa kluczowego można zgłosić wyjątek z dowolnej metody lub bloku. Istotne jest jednak, aby wyjątek był typu java.lang.Throwable lub należał do jednej z podklas klasy java.lang.Throwable.
Po drugie, słowo kluczowe 'throws' jest używane w sygnaturze metody w Javie. Jeśli metoda może zgłaszać wyjątki, jest to wskazywane przez tę metodę. Wspomniane wyjątki są obsługiwane przez ich odpowiednie funkcje wywołujące. Odbywa się to albo za pomocą bloków try and catch, albo za pomocą słowa kluczowego throws.
Po trzecie, superklasa dla wszystkich typów błędów i wyjątków w Javie nazywa się Throwable. Jest członkiem pakietu java.lang. JVM lub instrukcja throw zgłasza tylko instancje tej klasy lub jej podklas. Blok catch powinien zawierać tylko jeden argument i powinien być tego typu lub jego podklas. W przypadku tworzenia niestandardowych wyjątków, powinny one również rozszerzyć tę klasę.
23. Wyjaśnij StackOverflowError w Javie.
Jest to błąd zgłaszany przez maszynę JVM, gdy stos przepełnia się w czasie wykonywania.
24. Czy można nadpisać metodę superklasy, która zgłasza niesprawdzony wyjątek z zaznaczonymi wyjątkami w klasie podrzędnej?
Nie jest to możliwe, ponieważ jeśli metoda superklasy zgłosi niesprawdzony wyjątek, zostanie on nadpisany w klasie podrzędnej tym samym wyjątkiem lub innymi niesprawdzonymi wyjątkami. Ale nie można go obejść za pomocą sprawdzonych wyjątków.
25. Zdefiniuj wyjątki łańcuchowe w Javie.
W programie jeden wyjątek może zgłosić wiele wyjątków, wywołując efekt domina. Powoduje to łańcuch wyjątków. Warto znać lokalizację faktycznej przyczyny wyjątku. Jest to możliwe dzięki funkcji łańcuchowych wyjątków w Javie. Zostało to wprowadzone od JDK 1.4. W celu implementacji wyjątków łączonych w Javie do klasy Throwable dołączono dwa nowe konstruktory i dwie nowe metody. To są,
Konstruktorzy klasy rzucanej:
- Throwable(Throwable Cause): Przyczyną jest wyjątek, który zgłasza bieżący wyjątek.
- Throwable(String msg, Throwable Cause): Ciąg msg to komunikat o wyjątku. Przyczyną jest tutaj wyjątek, który wywołuje obecny wyjątek.
Metody klasy rzucanej:
- Metoda getCause() : ta metoda zwraca prawdziwą przyczynę podniesionego wyjątku.
- initCause(Throwable Cause) method : Przyczyna wyjątku wywołania jest ustawiana przez tę metodę.
26. Która klasa jest zdefiniowana jako superklasa dla wszystkich typów błędów i wyjątków w Javie?
Superklasą dla wszystkich typów błędów i wyjątków jest java.lang.Throwable w Javie.
27. Co można zakwalifikować jako poprawną kombinację try, catch i ostatecznie bloków?
Połączenie bloku try and catch.
próbować
{
//spróbuj blok
}
złapać (wyjątek ex)
{
//złap blok
}
Połączenie prób i w końcu bloku.
próbować
{
//spróbuj blok
}
wreszcie
{
//w końcu zablokuj
}
Kombinacja wszystkich trzech: spróbuj, zablokuj, w końcu bloki.
próbować
{
//spróbuj blok
}
złapać (wyjątek ex)
{
//złap blok
}
wreszcie
{
//w końcu zablokuj
}
28. Dlaczego używasz metody printStackTrace()?
Ta metoda służy do drukowania szczegółowych informacji o wystąpieniu wyjątku.
29. Jakie są przykłady sprawdzonych wyjątków?
Niektóre przykłady sprawdzonych wyjątków to ClassNotFoundException, SQLException i IOException.

30. Jakie są przykłady niesprawdzonych wyjątków?
Niektóre przykłady niesprawdzonych wyjątków obejmują NullPointerException, ArrayIndexOutOfBoundsException i NumberFormatException.
Przeczytaj także: Musisz przeczytać 47 pytań i odpowiedzi do wywiadu OOPS dla świeżo upieczonych i doświadczonych
Zawijanie
Jeśli chcesz dowiedzieć się więcej o big data, sprawdź Dyplom PG upGrad i IIIT-B z pełnego stosu oprogramowania, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 500 godzin rygorystycznych szkoleń, ponad 9 projektów i zadań, IIIT -B Status absolwenta, praktyczne praktyczne projekty zwieńczenia i pomoc w pracy z najlepszymi firmami.
Jeśli jesteś zainteresowany nauką o Data Science i zdecydujesz się na karierę w tej dziedzinie, sprawdź program Executive PG w dziedzinie Data Science IIIT-B i upGrad, który jest stworzony dla pracujących profesjonalistów i oferuje ponad 10 studiów przypadków i projektów, praktyczne warsztaty , mentoring z ekspertami z branży, indywidualny kontakt z mentorami branżowymi, ponad 400 godzin nauki i pomocy w pracy z najlepszymi firmami.
