상위 30개 예외 처리 인터뷰 질문 및 답변 [신입생 및 경험자용]
게시 됨: 2020-09-29예외 처리는 프로그램의 정상적인 흐름을 방해할 수 있는 가능한 런타임 오류를 처리하기 위해 알고리즘에서 구현되는 개념입니다. 이 개념을 사용하여 처리할 수 있는 몇 가지 오류는 다음과 같습니다.
- ClassNotFoundException
- IO 예외
- SQLException
- 원격 예외
- 런타임 예외:
- 산술 예외
- NullPointer 예외
- 숫자 형식 예외
- IndexOutOfBoundsException
- ArrayIndexOutOfBoundsException
- StringIndexOutOfBoundsException
이 구현의 장점은 프로그램을 실행하는 동안 예외가 발생하는 경우 프로그램의 충돌을 방지하는 것입니다. 예외 처리가 없으면 프로그램에서 예외가 발생하면 오류가 발생하고 나머지 프로그램은 실행되지 않습니다. 그러나 이 개념을 구현하면 발생한 예외와 관련하여 독립적인 경우 프로그램의 나머지 부분이 실행되는 해결 방법을 제공합니다. 자세히 알아보려면 데이터 과학 과정을 확인하십시오.
읽기: 반드시 읽어야 하는 30개의 Selenium 인터뷰 질문 및 답변: Ultimate Guide
예외 처리 인터뷰 질문 및 답변
1. 예외란 무엇을 의미합니까?
프로그램을 실행할 때 가끔 발생하는 비정상적인 상태입니다. 프로그램의 정상적인 흐름을 방해합니다. 이 예외를 처리해야 합니다. 그렇지 않으면 프로그램이 갑자기 종료될 수 있습니다.
2. Java에서 예외를 처리하는 방법을 설명합니다. 프로세스 이면의 예외 처리 메커니즘은 무엇입니까?

예외 처리 메커니즘에는 세 부분이 있습니다. 이것들은 다음과 같습니다.
- Try 블록: 가장 먼저 실행을 시도하고 발생할 수 있는 예외를 모니터링하는 코드 섹션입니다.
- Catch 블록: 'try' 블록에서 예외가 발생하면 이 코드 섹션에서 예외를 포착합니다.
- finally 블록: 이 섹션의 코드는 'try' 블록에서 예외가 있는 경우 예외와 상관없이 항상 실행됩니다. 예외가 없더라도 이 블록 아래의 코드가 실행됩니다.
3. 'try', 'catch', 'finally' 블록 사이에 다른 문을 둘 수 있습니까?
섹션 사이에 어떤 문장도 포함하지 않는 것이 좋습니다. 'try', 'catch' 및 'finally' 블록은 예외 처리 메커니즘의 전체 단위를 형성하기 때문입니다.
노력하다
{
//예외를 감시하는 코드.
}
//여기에 명령문을 보관할 수 없습니다.
catch(예외 예)
{
// try 블록이 throw한 예외를 포착합니다(있는 경우).
}
//여기에 명령문을 보관할 수 없습니다.
마지막으로
{
//이 블록은 예외와 상관없이 항상 실행됩니다.
}
4. 'catch' 및 'finally' 블록 없이 'try' 블록만 포함할 수 있습니까?
컴파일 오류가 발생합니다. 'try' 블록 뒤에는 'catch' 블록이나 'finally' 블록이 와야 합니다(둘 다 아닌 경우). 예외 처리의 흐름이 중단되지 않도록 'catch' 또는 'finally' 블록 중 하나가 필요합니다.
5. 제어가 finally 블록 자체에서 반환되는 경우 'finally' 블록 뒤에 명령문을 유지할 수 있습니까?
이로 인해 도달할 수 없는 catch 블록 오류가 발생합니다. 컨트롤이 'finally' 블록 자체에서 반환되기 때문입니다. 컴파일러는 예외가 있는 줄 뒤의 코드를 실행하지 못합니다. 그렇기 때문에 실행 시 연결할 수 없는 코드 오류가 표시됩니다.
유학을 꿈꾸십니까? 당신에게 딱 맞는 프로그램이 있습니다.6. 도달할 수 없는 catch 블록 오류를 설명합니다.
여러 catch 블록의 경우 catch 블록이 배치되는 순서는 가장 구체적인 것부터 가장 일반적인 것까지입니다. 즉, 예외의 하위 클래스가 먼저 와야 하고 상위 클래스가 그 다음에 와야 합니다. 상위 클래스가 먼저 유지되고 그 뒤에 하위 클래스가 유지되는 경우 컴파일러는 도달할 수 없는 catch 블록 오류를 표시합니다.
공개 클래스 예외 처리
{
공개 정적 무효 메인(String[] 인수)
{
노력하다
{
int i = Integer.parseInt("테스트");
//이 문은 지정된 입력이 문자열이고 //지정된 형식이 정수이기 때문에 NumberFormatException을 발생시킵니다.
}
catch(예외 예)
{
System.out.println("이 블록은 모든 예외 유형을 처리합니다.");
//이 블록은 예외의 슈퍼 클래스이므로 모든 종류의 예외를 //처리할 수 있습니다.
}
catch(NumberFormatException 예)
{
// 컴파일 시간 오류가 발생합니다.
//이 블록은 다음과 같이 도달할 수 없게 됩니다.
//예외는 이미 위의 //catch 블록에 의해 catch됩니다.
}
}
}
7. 'try' 블록에 있는 세 가지 명령문(statement1, statement2, statement3)을 고려하십시오. 'try' 블록을 실행하는 동안 발생한 예외를 포착하기 위해 'catch' 블록이 뒤따릅니다. statement2에서 예외가 발생했다고 가정합니다. statement3이 실행될 것이라고 생각합니까?
Statement3은 실행되지 않습니다. 어느 시점에서든 'try' 블록에서 예외가 발생하면 예외 이후의 나머지 코드는 실행되지 않습니다. 대신, 흐름 제어는 'catch' 블록으로 직접 올 것입니다.
8. Java에서 오류와 예외를 구별하십시오.
오류와 예외의 주요 차이점은 오류가 JVM(Java Virtual Machine)이 실행되는 환경에 의해 발생하는 반면 예외는 프로그램 자체에 의해 발생한다는 것입니다. 예를 들어 OutOfMemory는 JVM이 메모리를 소진할 때 발생하는 오류입니다.
그러나 NullPointerException은 프로그램이 null 개체에 액세스하려고 할 때 발생하는 예외입니다. 오류 복구는 불가능합니다. 따라서 오류에 대한 유일한 해결책은 실행을 종료하는 것입니다. 그러나 try 및 catch 블록을 사용하거나 호출자 함수에 예외를 다시 throw하여 예외를 해결할 수 있습니다.
필독: 자바 인터뷰 질문 및 답변
9. 예외의 유형은 무엇입니까? 설명하십시오.
두 가지 유형의 예외가 있습니다.
확인된 예외
컴파일러에서 알고 인식하는 예외 유형입니다. 이러한 예외는 컴파일 시간에만 확인할 수 있습니다. 따라서 컴파일 시간 예외라고도 합니다. 이들은 try 및 catch 블록을 사용하거나 throw 절을 사용하여 처리할 수 있습니다. 이러한 예외가 적절하게 처리되지 않으면 컴파일 시간 오류가 발생합니다. 예에는 RunTimeException을 제외한 java.lang.Exception의 하위 클래스가 포함됩니다.
확인되지 않은 예외
컴파일러에서 인식하지 못하는 예외 유형입니다. 런타임에만 발생합니다. 따라서 런타임 예외라고도 합니다. 컴파일 타임에 확인되지 않습니다. 따라서 성공적인 컴파일 후에도 적절하게 처리되지 않으면 프로그램이 조기에 종료될 수 있습니다. 예제에는 java.lang.RunTimeException 및 java.lang.Error의 하위 클래스가 포함됩니다.
10. Java의 예외 계층은 무엇입니까?
java.lang.Throwable은 Java의 모든 오류 및 예외의 상위 클래스입니다. 이 클래스는 java.lang.Object 클래스를 확장합니다. catch 블록의 인수는 해당 유형 또는 하위 클래스 유형이어야 합니다. Throwable 클래스에는 두 개의 하위 클래스가 포함됩니다.
- java.lang.Error : 이것은 Java의 모든 오류 유형에 대한 수퍼 클래스입니다. 여기에 포함된 일반적인 오류는 다음과 같습니다.
- java.lang.VirtualMachineError: 이 아래 –
- 스택오버플로우 오류
- 메모리 부족 오류
- java.lang.AssertionError
- java.lang.LinkageError: 이 아래 –
- NoClassDefFoundError
- 호환되지 않는 클래스 변경 오류
- java.lang.VirtualMachineError: 이 아래 –
- java.lang.Exception: 이것은 Java의 모든 예외 유형의 상위 클래스입니다. 이에 따른 일반적인 예외는 다음과 같습니다.
- 런타임 예외
- 산술 예외
- 숫자 형식 예외
- NullPointer 예외
- ArrayIndexOutOfBoundsException
- 클래스캐스트 예외
- java.lang.InterruptedException
- java.lang.IO 예외
- java.lang.SQL 예외
- java.lang.ParseException
- 런타임 예외
11. Java에서 런타임 예외란 무엇입니까? 몇 가지 예를 들어 보십시오.
런타임에 발생하는 예외를 런타임 예외라고 합니다. 컴파일러는 확인되지 않은 예외와 같은 이러한 예외를 인식할 수 없습니다. 여기에는 java.lang.RunTimeException 및 java.lang.Error의 모든 하위 클래스가 포함됩니다. 예로는 NumberFormatException, NullPointerException, ClassCastException, ArrayIndexOutOfBoundException, StackOverflowError 등이 있습니다.
12. Java에서 OutOfMemoryError를 정의합니다.
JVM에서 메모리가 부족할 때 발생하는 java.lang.Error의 하위 클래스입니다.
13. Java에서 NoClassDefFoundError와 ClassNotFoundException을 구별하십시오.
NoClassDefFoundError 및 ClassNotFoundException 모두 런타임에서 특정 클래스를 찾을 수 없을 때 발생합니다. 그러나 다른 시나리오에서 발생합니다. NoClassDefFoundError는 특정 클래스가 컴파일 시간에 존재했지만 런타임에 누락되어 오류가 발생한 경우입니다. ClassNotFoundException은 클래스 경로에서 업데이트되지 않은 클래스를 런타임에 로드하려고 시도하는 응용 프로그램에 대해 예외가 발생할 때 발생합니다.
14. 'try' 또는 'catch' 블록 중 하나가 컨트롤을 반환하면 'finally' 블록이 실행됩니까?
'finally' 블록은 try 또는 catch 블록이 컨트롤을 반환하는지 여부에 관계없이 항상 실행됩니다.
15. 수동으로 예외를 던질 수 있습니까? 그렇다면 방법을 설명하십시오.

수동으로 예외를 throw할 수 있습니다. 'throw' 키워드를 사용하여 수행됩니다. 수동으로 예외를 throw하는 구문은 다음과 같습니다.
InstanceOfThrowableType을 던집니다.
다음은 'throw' 키워드를 사용하여 수동으로 예외를 throw하는 예입니다.
노력하다
{
NumberFormatException 예 = 새로운 NumberFormatException(); //여기서 명시적으로 NumberFormatException에 대한 객체를 생성합니다.
예를 던지다; // throw 키워드를 사용하여 명시적으로 NumberFormatException 객체 던지기
}
catch(NumberFormatException 예)
{
System.out.println("이 블록에서 명시적으로 throw된 NumberFormatException 개체를 catch할 수 있습니다.");
}
읽기: 상위 35개의 봄 인터뷰 질문 및 답변: 궁극적인 가이드
16. Java에서 예외를 다시 던진다는 것은 무엇을 의미합니까?
'try' 블록에서 발생한 예외는 'catch' 블록에서 처리됩니다. 'catch' 블록이 해당 예외를 처리할 수 없는 경우 'throw' 키워드를 사용하여 동일한 예외를 다시 throw할 수 있습니다. 이 메커니즘을 예외 다시 발생이라고 합니다. 구현은 다음과 같습니다.
노력하다
{
문자열 s = null;
System.out.println(s.length()); //이 문은 NullPointerException을 발생시킵니다.
}
catch(NullPointerException 예)
{
System.out.println("여기서 NullPointerException이 발생했습니다.");
예를 던지다; //NullPointerException 다시 던지기
}
17. Java에서 'throws' 키워드를 사용하는 이유는 무엇입니까?
처리할 수 없는 경우 메서드에서 예외를 throw할 수 있는 경우 'throws' 키워드를 사용하여 해당 예외를 지정해야 합니다. 해당 예외를 처리할 때 해당 메서드의 호출자 함수에 도움이 됩니다. 'throws' 키워드를 사용하는 구문은 다음과 같습니다.
return_type method_name(parameter_list) 예외 목록 발생
{
//암호
}
여기에서 exception_list는 메서드에서 던질 수 있는 예외 목록입니다. 이러한 예외는 쉼표로 구분해야 합니다. 코드의 예:
공개 클래스 예외 처리
{
공개 정적 무효 메인(String[] 인수)
{
노력하다
{
methodWithThrows();
}
catch(NullPointerException 예)
{
System.out.println("methodWithThrows() 메서드에 의해 발생한 NullPointerException이 여기에서 catch됩니다.");
}
}
static void methodWithThrows()는 NullPointerException을 던집니다.
{
문자열 s = null;
System.out.println(s.length()); //이 문은 NullPointerException을 발생시킵니다.
}
}
18. 'finally' 블록 내에서 DB 리소스를 닫는 것과 같은 정리 작업을 유지하는 것이 좋습니다. 왜 필요한가?
'finally' 블록은 'try' 블록에서 예외가 발생하거나 발생한 예외가 'catch' 블록에서 catch되는지 여부와 관계없이 항상 실행됩니다. 정리 작업을 'finally' 블록에 유지하면 어떤 경우에도 이러한 작업의 작업이 보장되고 발생하거나 발생하지 않을 수 있는 예외의 영향을 받지 않습니다.
19. Java에서 final,finalize,finalize를 어떻게 구별합니까?
먼저 'final'은 변수나 메소드, 클래스를 불변으로 만드는 데 사용할 수 있는 키워드입니다. 간단히 말해서 변수를 final로 선언하면 초기화되면 값을 변경할 수 없습니다. 메서드가 final로 선언되면 하위 클래스에서 재정의하거나 수정할 수 없습니다. 클래스가 final로 선언되면 추가 클래스로 확장할 수 없습니다.
둘째, 'finally'는 'try' 및 'catch' 블록과 함께 예외 처리에 사용되는 블록입니다. 이 블록은 발생한 예외에 관계없이 또는 발생한 예외가 처리되는 경우 항상 실행됩니다. 일반적으로 이 블록은 데이터베이스 연결, I/O 리소스 등과 같은 리소스를 닫기 위한 정리 작업을 수행하는 데 사용됩니다.
셋째, finalize() 메서드는 보호된 메서드입니다. java.lang.Object 클래스에 속합니다. Java로 생성된 모든 클래스는 이 메소드를 상속합니다. 가비지 수집기 스레드는 개체가 메모리에서 제거되기 전에 이 메서드를 호출합니다. 메모리에서 개체를 제거하기 전에 이 메서드를 사용하여 일부 정리 작업을 수행합니다.
protected void finalize()는 throwable을 던집니다.
{
//정리 작업
}
20. 자바에서 사용자 정의 예외는 무엇입니까?
예외 클래스는 프로그램 흐름의 요구 사항에 따라 Java에서 throw될 수 있습니다. 이러한 예외를 사용자 정의 예외라고 합니다. 사용자 정의 예외라고도 합니다. 이러한 예외는 예외 계층의 클래스 중 하나를 확장해야 합니다.
21. Java에서 ClassCastException을 어떻게 설명하시겠습니까?
JVM이 한 유형의 객체를 다른 유형으로 캐스트할 수 없는 경우 이 예외가 발생합니다. RunTimeException입니다.
22. 자바에서 throw, throw 및 throwable을 구별합니다.
먼저 'throw' 키워드는 Java에서 수동으로 예외를 throw하는 데 사용됩니다. 이 키워드를 사용하면 모든 메서드나 블록에서 예외를 throw할 수 있습니다. 그러나 예외는 반드시 java.lang.Throwable 클래스 유형이거나 java.lang.Throwable 클래스의 하위 클래스 중 하나에 속해야 합니다.
둘째, 'throws' 키워드는 Java의 메소드 서명에 사용됩니다. 메서드가 예외를 throw할 수 있는 경우 이 메서드로 표시됩니다. 언급된 예외는 각각의 호출자 함수에 의해 처리됩니다. try 및 catch 블록을 사용하거나 throw 키워드를 사용하여 수행됩니다.
셋째, Java의 모든 유형의 오류 및 예외에 대한 수퍼 클래스를 Throwable이라고 합니다. java.lang 패키지의 구성원입니다. JVM 또는 throw 문은 이 클래스 또는 해당 하위 클래스의 인스턴스만 발생시킵니다. catch 블록에는 하나의 인수만 포함되어야 하며 이 유형 또는 해당 하위 클래스여야 합니다. 사용자 정의 예외가 생성되는 경우 이 클래스도 확장해야 합니다.
23. Java의 StackOverflowError를 설명하십시오.
런타임에 스택이 오버플로될 때 JVM에서 throw되는 오류입니다.
24. 확인되지 않은 예외를 발생시키는 슈퍼 클래스 메서드를 하위 클래스의 확인된 예외로 재정의할 수 있습니까?
슈퍼 클래스 메서드가 확인되지 않은 예외를 throw하면 동일한 예외 또는 다른 확인되지 않은 예외가 있는 하위 클래스에서 재정의되기 때문에 불가능합니다. 그러나 확인된 예외로 재정의할 수 없습니다.
25. Java에서 연쇄 예외를 정의하십시오.
프로그램에서 하나의 예외는 도미노 효과를 유발하여 많은 예외를 발생시킬 수 있습니다. 이로 인해 일련의 예외가 발생합니다. 예외의 실제 원인 위치를 아는 것이 좋습니다. 이것은 Java의 연결 예외 기능으로 가능합니다. 이것은 JDK 1.4부터 도입되었습니다. Java에서 연쇄 예외를 구현하기 위해 두 개의 새 생성자와 두 개의 새 메소드가 Throwable 클래스에 포함됩니다. 이것들은,
throwable 클래스의 생성자:
- Throwable(Throwable 원인): 원인은 현재 예외를 발생시키는 예외입니다.
- Throwable(String msg, Throwable 원인): msg 문자열은 예외 메시지입니다. 현재 예외를 발생시키는 예외가 여기의 원인입니다.
던질 수 있는 클래스의 메서드:
- getCause() 메서드: 이 메서드는 예외가 발생한 실제 원인을 반환합니다.
- initCause(Throwable cause) 메소드 : 호출 예외의 원인은 이 메소드에 의해 설정됩니다.
26. Java에서 모든 유형의 오류 및 예외에 대한 수퍼 클래스로 정의되는 클래스는 무엇입니까?
모든 유형의 오류 및 예외에 대한 수퍼 클래스는 Java에서 java.lang.Throwable입니다.
27. try, catch 및 finally 블록의 올바른 조합으로 무엇을 분류할 수 있습니까?
try 블록과 catch 블록의 조합입니다.
노력하다
{
// 시도 블록
}
catch(예외 예)
{
//캐치 블록
}
try와 finally 블록의 조합입니다.
노력하다
{
// 시도 블록
}
마지막으로
{
//마침내 차단
}
세 가지 조합: 시도, 차단, 최종 차단.
노력하다
{
// 시도 블록
}
catch(예외 예)
{
//캐치 블록
}
마지막으로
{
//마침내 차단
}
28. 왜 printStackTrace() 메소드를 사용합니까?
이 메서드는 발생한 예외에 대한 자세한 정보를 인쇄하는 데 사용됩니다.
29. 확인된 예외의 몇 가지 예는 무엇입니까?
확인된 예외의 몇 가지 예에는 ClassNotFoundException, SQLException 및 IOException이 포함됩니다.

30. 확인되지 않은 예외의 몇 가지 예는 무엇입니까?
확인되지 않은 예외의 몇 가지 예로는 NullPointerException, ArrayIndexOutOfBoundsException 및 NumberFormatException이 있습니다.
또한 읽기: 신입 및 경험자를 위한 47 OOPS 인터뷰 질문 및 답변을 읽어야 합니다.
마무리
빅 데이터에 대해 자세히 알아보려면 upGrad & IIIT-B의 전체 스택 소프트웨어 개발 PG 디플로마를 확인하세요. 이 PG 디플로마는 일하는 전문가를 위해 설계되었으며 500시간 이상의 엄격한 교육, 9개 이상의 프로젝트 및 과제, IIIT를 제공합니다. -B 동문 상태, 실질적인 실습 캡스톤 프로젝트 및 최고의 기업과의 취업 지원.
데이터 과학 학습에 관심이 있고 이 분야의 직업을 선택하는 경우 작업 전문가를 위해 만들어졌으며 10개 이상의 사례 연구 및 프로젝트, 실용적인 실습 워크샵을 제공하는 IIIT-B & upGrad의 데이터 과학 경영자 PG 프로그램을 확인하십시오. , 업계 전문가와의 멘토링, 업계 멘토와의 1:1 학습, 최고의 기업과의 400시간 이상의 학습 및 취업 지원.
