JavaRush /Java Blog /Random-KO /Java 예외에 관한 10가지 질문
raynn
레벨 31
Нижний Новгород

Java 예외에 관한 10가지 질문

Random-KO 그룹에 게시되었습니다
이 기사에서는 Java의 예외에 관해 가장 자주 묻는 10가지 질문을 설명합니다. Java의 예외에 관한 상위 10가지 질문 - 1

1. 검증 가능한 것과 검증 불가능한 것

즉, 확인된 예외는 메서드 본문에서 명시적으로 포착되거나 메서드의 throws 섹션에서 선언되어야 합니다. 확인되지 않은 예외는 0으로 나누기, 널 포인터 등과 같이 해결할 수 없는 문제로 인해 발생합니다. 확인된 예외는 API를 사용하는 다른 개발자가 예외 처리 방법을 알고 있을 것으로 기대하기 때문에 특히 중요합니다. 예를 들어, IOException은 일반적으로 사용되는 확인 예외인 반면 RuntimeException은 확인되지 않은 예외입니다. 더 읽기 전에 Java의 계층적 예외 다이어그램을 확인하세요 .

2. 예외를 처리하는 가장 좋은 방법

예외를 올바르게 처리할 수 있으면 이를 포착해야 하며, 그렇지 않으면 전달해야 합니다.

3. try에 정의된 변수를 catch나 finally에서 사용할 수 없는 이유는 무엇입니까?

다음 코드 부분에서 try 블록에 선언된 s 줄은 catch 블록에서 사용할 수 없습니다. 이 코드는 컴파일되지 않습니다.
try {
	File file = new File("path");
	FileInputStream fis = new FileInputStream(file);
	String s = "inside";
} catch (FileNotFoundException e) {
	e.printStackTrace();
	System.out.println(s);
}
그 이유는 try 블록에서 예외가 발생한 정확한 위치를 알 수 없기 때문입니다. 개체가 선언되기 전에 예외가 발생했을 가능성이 있습니다. 그리고 이것은 이 예에서도 마찬가지입니다.

4. Double.parseDouble(null)과 Integer.parseInt(null)이 서로 다른 예외를 발생시키는 이유는 무엇입니까?

맞습니다. 그들은 다른 예외를 발생시킵니다. 이것은 JDK 문제입니다. 그것들은 단순히 다른 사람들에 의해 디자인되었으므로 너무 걱정할 필요가 없습니다.
Integer.parseInt(null);
// вызывает java.lang.NumberFormatException: null

Double.parseDouble(null);
// вызывает java.lang.NullPointerException

5. Java의 기본 런타임 예외

다음은 그 중 몇 가지입니다.
IllegalArgumentException
ArrayIndexOutOfBoundsException
다음과 같이 조건이 충족되지 않을 때 if 문에서 사용할 수 있습니다.
if (obj == null) {
   throw new IllegalArgumentException("obj не может быть равно null");

6. 하나의 catch 블록에서 여러 예외를 포착할 수 있습니까?

대답은 '예'입니다. 이러한 예외의 클래스를 클래스 상속 계층 구조에서 동일한 슈퍼클래스로 추적할 수 있는 한 해당 슈퍼클래스만 사용할 수 있습니다.

7. 생성자가 예외를 발생시킬 수 있나요?

대답은 '예'입니다. 생성자는 단지 특별한 종류의 메소드일 뿐입니다. 다음은 코드 예시입니다 .

8. 마지막 블록에서 예외 던지기

원칙적으로 다음과 같이 합법적으로 수행할 수 있습니다.
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		try {
			FileInputStream fis = new FileInputStream(file2);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}
try-catch그러나 코드의 가독성을 유지하려면 중첩된 블록을 새 메서드로 선언하고 이 메서드에 대한 호출을 블록에 삽입해야 합니다 finally.
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		methodThrowException();
	}
}

9. finally 블록에서 return을 사용할 수 있나요?

그래 넌 할수있어.

10. 개발자는 왜 예외를 조용히 처리합니까?

예를 들어, 이러한 코드 조각이 자주 나타납니다. 적절한 예외 처리가 그토록 중요하다면 개발자는 왜 계속해서 이런 방식으로 작성합니까?
try {
     ...
} catch(Exception e) {
     e.printStackTrace();
}
무시하는 것이 가장 쉽습니다. 그러나 이것이 자주 행해진다고 해서 그것이 옳다는 것을 의미하는 것은 아니다. 연결:
  1. Java의 확인되지 않은 예외
  2. Java의 계층적 예외 트리의 루트
  3. stackoverflow의 예외에 대한 질문
원본 기사
그 밖에 읽을 내용:

자바의 예외

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION