Java 면접 질문 - 예외
예외에 관한 Java 면접 질문
면접 질문은 다음과 같습니다.
1. Java에서 예외란 무엇인가요?
예외는 프로그램 실행 중에 발생할 수 있는 오류 이벤트이며 정상적인 흐름을 방해합니다. 사용자가 입력한 잘못된 데이터, 하드웨어 오류, 네트워크 연결 오류 등 다양한 상황에서 예외가 발생할 수 있습니다.
(학습 영상 공유: java 교육 영상)
Java 문을 실행하는 동안 오류가 발생할 때마다 예외 객체가 생성되고 JRE는 예외를 처리할 예외 핸들러를 찾으려고 시도합니다. 적합한 예외 핸들러가 발견되면 예외 객체가 핸들러 코드에 전달되어 예외를 처리하는 것을 예외 포착이라고 합니다. 핸들러를 찾을 수 없으면 애플리케이션은 런타임 환경에 예외를 발생시키고 JRE는 프로그램을 종료합니다.
Java 예외 처리 프레임워크는 런타임 오류를 처리하는 데만 사용되며, 컴파일 시간 오류는 예외 처리 프레임워크에서 처리되지 않습니다.
2. Java의 예외 처리 키워드는 무엇인가요?
Java 예외 처리에는 네 가지 키워드가 사용됩니다.
throw: 때때로 명시적으로 예외 개체를 생성한 다음 이를 던져 프로그램의 정상적인 처리를 중지하고 싶을 때가 있습니다. throw 키워드는 이를 처리하기 위해 런타임에 예외를 발생시키는 데 사용됩니다.
throws: 메소드에서 확인된 예외를 처리하지 않고 던질 때 메소드 시그니처에 throws 키워드를 사용하여 메소드가 던질 수 있는 예외에 대해 호출자 프로그램에 알려야 합니다. 호출 메서드는 이러한 예외를 처리하거나 throws 키워드를 사용하여 호출 메서드에 전파할 수 있습니다. throws 절과 main() 메소드를 통해 여러 예외를 제공할 수 있습니다.
try-catch: 예외 처리를 위해 코드에서 try-catch 블록을 사용합니다. try는 블록의 시작이고, catch는 try 블록의 끝에서 예외를 처리합니다. try를 사용하여 여러 개의 catch 블록을 가질 수 있으며 try-catch 블록을 중첩할 수도 있습니다. catch 블록에는 Exception 유형이어야 하는 매개변수가 필요합니다.
finally: finally 블록은 선택 사항이며 try-catch 블록에서만 사용할 수 있습니다. 예외는 실행 프로세스를 일시 중지하므로 닫히지 않는 일부 리소스를 열 수 있으므로 finally 블록을 사용할 수 있습니다. finally 블록은 예외 발생 여부에 관계없이 항상 실행됩니다.
3. Java 예외 계층을 설명하세요.
Java 예외는 계층적이며 상속은 다양한 유형의 예외를 분류하는 데 사용됩니다. Throwable은 Java Exceptions Hierarchy의 상위 클래스이며 두 개의 하위 객체(Error 및 Exception)를 갖습니다. 예외는 다시 확인된 예외와 런타임 예외로 구분됩니다.
오류는 하드웨어 오류, JVM 충돌, 메모리 부족 오류 등 애플리케이션 범위를 벗어나 예측 및 복구가 불가능한 특수한 상황입니다.
Checked Exception은 FileNotFoundException과 같이 프로그램에서 예상하고 복구를 시도할 수 있는 특별한 상황입니다. 우리는 이 예외를 잡아서 사용자에게 유용한 메시지를 제공하고 디버깅을 위해 적절하게 기록해야 합니다. Exception은 모든 Checked Exception의 상위 클래스입니다.
런타임 예외는 배열에서 요소를 검색하는 등 잘못된 프로그래밍으로 인해 발생합니다. 요소를 검색하기 전에 배열의 길이를 확인해야 합니다. 그렇지 않으면 런타임에 ArrayIndexOutOfBoundException이 발생할 수 있습니다. RuntimeException은 모든 런타임 예외의 상위 클래스입니다.
4. Java 예외 클래스의 중요한 메소드는 무엇입니까?
Exception 및 모든 하위 클래스는 특정 메서드를 제공하지 않으며 모든 메서드는 기본 클래스 Throwable에 정의됩니다.
String getMessage() - 此方法返回消息String of Throwable,并且可以在通过构造函数创建异常时提供消息。 String getLocalizedMessage() - 提供此方法,以便子类可以覆盖它以向调用程序提供特定于语言环境的消息。此方法getMessage()的可抛出类实现只是使用方法来返回异常消息。 synchronized Throwable getCause() - 此方法返回异常的原因或null id,原因未知。 String toString() - 此方法以String格式返回有关Throwable的信息,返回的String包含Throwable类和本地化消息的名称。 void printStackTrace() - 此方法将堆栈跟踪信息打印到标准错误流,此方法已重载,我们可以将PrintStream或PrintWriter作为参数传递,以将堆栈跟踪信息写入文件或流。
5. Java 7 ARM 기능과 멀티캐치 블록을 설명하세요.
try 블록에서 많은 예외를 포착하면 catch 블록 코드가 매우 보기 흉하고 주로 오류를 기록하기 위한 중복 코드로 구성되어 있다는 것을 알게 될 것입니다. Java 7의 기능 중 하나가 다중 catch 블록이라는 것을 기억하세요. 하나의 catch 블록에서 여러 예외를 잡을 수 있습니다. 이 기능이 포함된 catch 블록은 다음과 같습니다.
catch(IOException | SQLException | Exception ex){ logger.error(ex); throw new MyException(ex.getMessage()); }
대부분의 경우 finally 블록을 사용하여 리소스를 닫지만 때로는 리소스가 고갈되면 닫는 것을 잊어버리고 런타임 예외가 발생합니다. 이러한 예외는 디버그하기 어렵기 때문에 이러한 유형의 리소스를 사용하는 모든 위치를 확인하여 해당 예외를 닫아야 할 수도 있습니다. 따라서 Java 7의 개선 사항 중 하나는 try-with-resources입니다. try 문에서 리소스를 생성하고 이를 try-catch 블록에서 사용할 수 있습니다. try-catch 블록에서 실행이 수행되면 런타임 환경은 이러한 리소스를 자동으로 닫습니다. 이 개선 사항이 포함된 샘플 try-catch 블록은 다음과 같습니다.
try (MyResource mr = new MyResource()) { System.out.println("MyResource created in try-with-resources"); } catch (Exception e) { e.printStackTrace(); }
(더 많은 관련 인터뷰 질문 공유: java 인터뷰 질문 및 답변)
6 Java에서 Checked 예외와 Unchecked 예외의 차이점은 무엇입니까?
Checked Exception은 try-catch 블록을 사용하여 코드에서 처리해야 합니다. 그렇지 않으면 메서드는 throws 키워드를 사용하여 메서드에서 발생할 수 있는 확인된 예외에 대해 호출자에게 알려야 합니다. 확인되지 않은 예외는 프로그램에서 처리하거나 메서드의 throws 절에서 언급할 필요가 없습니다.
Exception은 확인된 모든 예외 RuntimeException의 슈퍼클래스이지만 확인되지 않은 모든 예외의 슈퍼클래스입니다. RuntimeException은 Exception의 하위 클래스입니다.
已检查的异常是需要在代码中处理的错误方案,否则您将收到编译时错误。例如,如果您使用FileReader读取文件,它会抛出FileNotFoundException,我们必须在try-catch块中捕获它或将其再次抛给调用方法。
未经检查的异常主要是由编程不良引起的,例如在对象引用上调用方法时的NullPointerException,而不确保它不为null。例如,我可以编写一个方法来从字符串中删除所有元音。确保不传递空字符串是调用者的责任。我可能会改变方法来处理这些场景,但理想情况下,调用者应该处理这个问题。
7、Java中throw和throws关键字有什么区别?
throws关键字与方法签名一起用于声明方法可能抛出的异常,而throw关键字用于破坏程序流并将异常对象移交给运行时来处理它。
8、如何在Java中编写自定义异常?
我们可以扩展Exception类或其任何子类来创建我们的自定义异常类。自定义异常类可以拥有自己的变量和方法,我们可以使用它们将错误代码或其他与异常相关的信息传递给异常处理程序。
自定义异常的一个简单示例如下所示。
package com.journaldev.exceptions; import java.io.IOException; public class MyException extends IOException { private static final long serialVersionUID = 4664456874499611218L; private String errorCode="Unknown_Exception"; public MyException(String message, String errorCode){ super(message); this.errorCode=errorCode; } public String getErrorCode(){ return this.errorCode; } }
9、Java中的OutOfMemoryError是什么?
Java中的OutOfMemoryError是java.lang.VirtualMachineError的子类,当JVM用完堆内存时,它会抛出它。我们可以通过提供更多内存来通过java选项运行java应用程序来修复此错误。
$>java MyProgram -Xms1024m -Xmx1024m -XX:PermSize=64M -XX:MaxPermSize=256m
10、“主线程中的异常”有哪些不同的情况?
一些常见的主线程异常情况是:
主线程java.lang.UnsupportedClassVersionError中的异常:
当您的java类是从另一个JDK版本编译并且您尝试从另一个Java版本运行它时,会出现此异常。
主线程java.lang.NoClassDefFoundError中的异常:
此异常有两种变体。第一个是您提供类全名和.class扩展名的地方。第二种情况是找不到Class。
主线程java.lang.NoSuchMethodError中的异常:
main:当您尝试运行没有main方法的类时会出现此异常。
线程“main”中的异常java.lang.ArithmeticException:
每当从main方法抛出任何异常时,它都会打印异常是控制台。第一部分解释了从main方法抛出异常,第二部分打印异常类名,然后在冒号后打印异常消息。
11、Java中的final,finally和finalize有什么区别?
final和finally是java中的关键字,而finalize是一种方法。
final关键字可以与类变量一起使用,以便它们不能被重新分配,类可以避免按类扩展,并且使用方法来避免子类覆盖。
finally关键字与try-catch块一起使用,以提供始终执行的语句即使出现一些异常,通常最终也会用来关闭资源。
finalize()方法由垃圾收集器在销毁对象之前执行,这是确保关闭所有全局资源的好方法。
在三者之中,最后只涉及到java异常处理。
12、当main方法抛出异常时会发生什么?
当main()方法抛出异常时,Java Runtime终止程序并在系统控制台中打印异常消息和堆栈跟踪。
13、我们可以有一个空的catch块吗?
我们可以有一个空的catch块,但它是最差编程的例子。我们永远不应该有空的catch块,因为如果异常被该块捕获,我们将没有关于异常的信息,并且它将成为调试它的噩梦。应该至少有一个日志记录语句来记录控制台或日志文件中的异常详细信息。
14、提供一些Java异常处理最佳实践?
与Java异常处理相关的一些最佳实践是:
使用特定异常以便于调试。
在程序中尽早抛出异常(Fail-Fast)。
在程序后期捕获异常,让调用者处理异常。
使用Java 7 ARM功能确保资源已关闭或使用finally块正确关闭它们。
始终记录异常消息以进行调试。
使用multi-catch块清洁关闭。
使用自定义异常从应用程序API中抛出单一类型的异常。
遵循命名约定,始终以Exception结束。
记录在javadoc中使用@throws的方法抛出的异常。
异常是昂贵的,所以只有在有意义的时候抛出它。否则,您可以捕获它们并提供空或空响应。
相关推荐:java入门教程
위 내용은 Java 면접 질문 - 예외의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Java는 초보자와 숙련된 개발자 모두가 배울 수 있는 인기 있는 프로그래밍 언어입니다. 이 튜토리얼은 기본 개념부터 시작하여 고급 주제를 통해 진행됩니다. Java Development Kit를 설치한 후 간단한 "Hello, World!" 프로그램을 작성하여 프로그래밍을 연습할 수 있습니다. 코드를 이해한 후 명령 프롬프트를 사용하여 프로그램을 컴파일하고 실행하면 "Hello, World!"가 콘솔에 출력됩니다. Java를 배우면 프로그래밍 여정이 시작되고, 숙달이 깊어짐에 따라 더 복잡한 애플리케이션을 만들 수 있습니다.
