본문 바로가기
웹프로그래밍/Java

Java exceptions

by Seras 2017. 11. 22.
반응형

이 기사에서는 Java 예외에 대한 자주 묻는 10 가지 질문을 요약합니다.

1. Checked vs. Unchecked

간단히 말해, 검사 된 예외는 명시 적으로 메소드에서 발견되거나 메소드의 throws 절에서 선언되어야합니다. 확인되지 않은 예외는 0으로 나누기, null 포인터 등으로 해결할 수없는 문제로 인해 발생합니다. API를 사용하는 다른 개발자가 예외 처리 방법을 알기를 기대하기 때문에 확인 된 예외가 특히 중요합니다.

예를 들어, IOException은 일반적으로 사용되는 검사 예외이며 RuntimeException은 검사되지 않은 예외입니다. 당신은 체크 아웃 할 수있다 자바 예외 계층 구조 다이어그램을 나머지를 읽기 전에.


2. 예외 관리를위한 모범 사례

예외가 적절히 처리 될 수 있으면 catch되어야하며, 그렇지 않으면 throw되어야합니다.

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 블록에서 예외가 던져 질 곳을 알지 못하기 때문입니다. 객체가 선언되기 전에 예외가 throw 될 가능성이 큽니다. 이 특별한 예에 대해서도 마찬가지입니다.

4. Double.parseDouble (null)과 Integer.parseInt (null)가 다른 예외를 던지는 이유는 무엇입니까?

그들은 실제로 다른 예외를 던집니다. 이것은 JDK의 문제점입니다. 그것들은 다른 개발자에 의해 개발 되었기 때문에 너무 많은 생각을 할 가치가 없습니다.

Integer.parseInt(null); 
// throws java.lang.NumberFormatException: null
 
Double.parseDouble(null); 
// throws java.lang.NullPointerException

5. Java에서 일반적으로 사용되는 런타임 예외

다음은 그 중 일부입니다.
IllegalArgumentException
ArrayIndexOutOfBoundsException

다음과 같이 조건이 만족되지 않으면 if 문에서 사용할 수 있습니다.

if (obj == null) {
   throw new IllegalArgumentException("obj can not be null");

6. 같은 catch 절에서 여러 예외를 catch 할 수 있습니까?

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

7. 생성자가 java에서 예외를 throw 할 수 있습니까?

대답은 '예'입니다. 생성자는 특별한 종류의 메소드입니다. 

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. Can return be used in finally block

예, 그럴 수 있습니다.

10. 왜 개발자는 예외를 자동으로 사용합니까?

다음과 같은 타임 코드 세그먼트가 너무 많습니다. 예외 처리가 중요하다면 왜 개발자들은 그렇게해야할까요?

try {
     ...
} catch(Exception e) {
     e.printStackTrace();
}

무시하는 것은 쉽습니다. 빈번한 출현은 정확성을 의미하지 않습니다.

반응형

'웹프로그래밍 > Java' 카테고리의 다른 글

클라이언트 단? 서버 단?  (0) 2017.11.29
서버, 브라우저간의 변수  (0) 2017.11.23
Java Maps  (0) 2017.11.22
Java Collections  (0) 2017.11.22
Java Strings  (0) 2017.11.22