Try-Catch-Finally In Java | 예외 처리
· Try Blocks
· Catch Blocks
· Final Blocks
· 종합하기
· 중첩된 try 블록
· Catch multiple exceptions
블록 시도
try 블록은 try/catch 블록의 첫 번째 부분입니다. 여기에는 예외를 유발할 수 있는 모든 코드가 포함됩니다. Java에서 명령문의 결과가 확실하지 않을 때 해당 명령문을 이 try 블록 안에 넣을 수 있습니다. try 블록은 메서드 또는 다른 try 블록에서 사용할 수 있습니다.
try 블록 다음에 는 항상 관련된 try 블록에서 발생하는 예외를 처리하는 catch 블록이 옵니다 .
IOExceptions의 경우 파일을 생성, 읽기, 쓰기 또는 닫는 모든 코드를 try 블록 안에 넣습니다.
통사론
예외 처리기 구성의 첫 번째 단계는 예외를 throw할 수 있는 코드를 try 블록 내에 포함하는 것입니다. 일반적으로 try 블록은 다음과 같습니다.
try {
code
}
catch and finally blocks . . .
예
ListOfNumbers 클래스에서 writeList 메서드 에 대한 예외 핸들러를 생성하려면 writeList 메서드 의 예외 발생 명령문을 try 블록 안에 넣으십시오 . 이를 수행하는 방법은 여러 가지가 있습니다. 자체 try 블록 내에 예외를 발생시킬 수 있는 각 코드 줄을 배치하고 각각에 대해 별도의 예외 처리기를 제공할 수 있습니다. 또는 모든 writeList 코드를 단일 try 블록에 넣고 여러 처리기를 연결할 수 있습니다. 다음 목록은 해당 코드가 매우 짧기 때문에 전체 메서드에 대해 하나의 try 블록을 사용합니다.
private List<Integer> list;
private static final int SIZE = 10;
public void writeList() {
PrintWriter out = null;
try {
System.out.println("Entered try statement");
FileWriter f = new FileWriter("OutFile.txt");
out = new PrintWriter(f);
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = " + list.get(i));
}
}
catch and finally blocks . . .
}
블록 사이드 노트 시도
- 예외를 트리거할 수 있는 코드와 함께 try 블록은 예외를 발생시키지 않는 코드도 포함할 수 있지만 반드시 그럴 필요는 없습니다.
- 프로그램은 둘 이상의 try 블록을 포함할 수 있습니다. 또한 다른 try 블록 안에 하나의 try 블록이 있을 수 있습니다.
캐치 블록
try/catch 블록의 후반부는 catch 블록입니다. try 블록에는 예외를 발생시키는 코드가 포함되어 있는 반면 catch 블록에는 예외를 처리하는 코드가 포함되어 있습니다.
Java에서 catch 블록은 try 블록에서 포착된 예외를 처리하는 데 사용됩니다. catch 블록에는 코드가 포함되어 있으며 try 블록 내에서 예외가 발생하면 실행됩니다. 시스템이 try 블록의 명령문을 실행하는 동안 예외가 발생하면 나머지 명령문을 건너뛰고 제어를 해당 catch 블록으로 넘깁니다.
catch 블록은 매개 변수 내에서 예외 유형을 선언하여 try 블록 예외를 포착하고 처리합니다. catch 블록에서 선언된 예외는 상위 클래스 예외(즉, Exception)이거나 생성된 예외 유형이어야 합니다. 그러나 가장 좋은 방법은 생성된 예외 유형을 선언하는 것입니다.
catch 블록은 항상 try 블록 다음에 옵니다. 컨트롤이 try 블록에서 나오면 다시 try 블록으로 가져올 방법이 없습니다.
통사론
try 블록 바로 뒤에 하나 이상의 catch 블록을 제공하여 예외 핸들러를 try 블록 과 연결합니다 . try 블록 의 끝 과 첫 번째 catch 블록 의 시작 사이에는 코드가 있을 수 없습니다 .
try {
} catch (ExceptionType name) {
}
catch 블록 에는 예외 처리기가 호출될 때 실행되는 코드가 포함되어 있습니다. 런타임 시스템은 핸들러가 호출 스택에서 ExceptionType이 발생한 예외 유형과 일치하는 첫 번째 핸들러일 때 예외 핸들러를 호출합니다 . 던져진 객체가 예외 처리기의 인수에 합법적으로 할당될 수 있는 경우 시스템은 일치하는 것으로 간주합니다.
Catch 블록 인수
Catch 블록은 하나의 인수, 즉 catch(처리)해야 하는 예외 유형을 사용합니다. 이러한 인수는 매우 특정한 유형의 예외에서 매우 포괄적인 예외 범주에 이르기까지 다양합니다.
예
다음은 writeList 메서드에 대한 두 가지 예외 처리기입니다.
try {
} catch (IndexOutOfBoundsException e) {
System.err.println("IndexOutOfBoundsException: " + e.getMessage());
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
블록 내용 잡기
catch 블록의 내용은 예외가 발생할 때(예: 액세스 중인 파일이 존재하지 않을 때) 발생하기를 원하는 것입니다. 메시지를 인쇄하거나 오류를 수정하는 코드를 가질 수 있습니다(예: 다시 파일명.
Catch Block 메시지(예외에 대한 설명 표시)
catch 블록 안에 원하는 메시지를 인쇄할 수 있습니다.
toString() 사용
Throwable은 예외에 대한 설명이 포함된 문자열을 반환하도록 toString( ) 메서드(Object에 의해 정의됨)를 재정의합니다. 단순히 예외를 인수로 전달하여 println( ) 문에 이 설명을 표시할 수 있습니다. 예를 들어 이전 프로그램의 catch 블록은 다음과 같이 다시 작성할 수 있습니다.
catch (ArithmeticException e) {
System.out.println("Exception: " + e);
a = 0; // set a to zero and continue
}
Exception: java.lang.ArithmeticException: / by zero
- getMessage() : 각 예외 유형에 특정한 오류 메시지를 반환합니다. 이것을 println 문과 연결하십시오.
- printStackTrace() : 오류 유형과 프로그램에서 오류가 발생한 위치를 인쇄합니다. 이 메서드는 디버깅 및 예외에 대한 이유를 찾는 데 특히 유용합니다.
- 모든 try 블록에는 적어도 하나의 catch 블록이 필요합니다.
- try 블록은 여러 개의 catch 블록을 가질 수 있습니다. 오른쪽의 예를 참조하십시오.
- Catch 블록은 짝을 이루는 try 블록 바로 뒤에 와야 합니다.
마지막으로 블록
finally 키워드는 try 블록 뒤에 오는 코드 블록을 만드는 데 사용됩니다. finally 코드 블록은 예외 발생 여부에 관계없이 항상 실행됩니다. finally 블록을 사용하면 보호된 코드에서 어떤 일이 발생하든 상관없이 실행하려는 정리 유형 명령문을 실행할 수 있습니다. catch 블록의 끝에 finally 블록이 나타납니다. finally 블록은 개체 참조를 무효화하고 I/O 스트림을 닫는 데 사용됩니다.
finally 블록 은 항상 try 블록이 종료될 때 실행됩니다 . 이렇게 하면 예기치 않은 예외가 발생하더라도 finally 블록이 실행됩니다. 하지만 finally 는 단순한 예외 처리 이상으로 유용합니다. 프로그래머가 정리 코드가 실수로 return , continue 또는 break 에 의해 우회되는 것을 방지할 수 있습니다 . 예외가 예상되지 않는 경우에도 finally 블록 에 정리 코드를 넣는 것은 항상 좋은 습관입니다.
런타임 시스템은 try 블록 내에서 발생하는 일에 관계없이 항상 finally 블록 내에서 명령문을 실행합니다 . 따라서 청소를 수행하기에 완벽한 장소입니다.
통사론
finally {
// cleanup code
}
writeList 메서드에 대한 다음 finally 블록은 PrintWriter 및 FileWriter 를 정리한 다음 닫습니다 .
finally {
if (out != null) {
System.out.println("Closing PrintWriter");
out.close();
} else {
System.out.println("PrintWriter not open");
}
if (f != null) {
System.out.println("Closing FileWriter");
f.close();
}
}
- 마지막으로 블록은 try/catch 블록에 대한 선택적인 추가 사항입니다.
- 마지막으로 블록은 코드에서 예외적으로 어떤 일이 발생하든 실행하려는 코드에 사용됩니다.
- 마지막으로 실행되는 항목이며 프로그램을 실행할 때마다 실행됩니다.
- finally 블록의 한 가지 용도는 프로그램 끝에서 파일이 닫히는지 확인하는 것입니다.
private List<Integer> list;
private static final int SIZE = 10;
public void writeList() {
PrintWriter out = null;
try {
System.out.println("Entered try statement");
FileWriter f = new FileWriter("OutFile.txt");
out = new PrintWriter(f);
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = " + list.get(i));
}
}
// catch blocks
catch (IndexOutOfBoundsException e) {
System.err.println("IndexOutOfBoundsException: " + e.getMessage());
}
catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
// finally block
finally {
if (out != null) {
System.out.println("Closing PrintWriter");
out.close();
} else {
System.out.println("PrintWriter not open");
}
if (f != null) {
System.out.println("Closing FileWriter");
f.close();
}
}
}
중첩된 try 블록이 사용되면 내부 try 블록이 먼저 실행됩니다. 내부 try 블록에서 발생한 모든 예외는 해당 catch 블록에서 포착됩니다. 일치하는 catch 블록이 없으면 외부 try 블록 의 catch 블록이 검사됩니다. 이 프로세스는 모든 중첩된 try 문이 소진될 때까지 계속됩니다. 일치하는 catch 블록이 없으면 프로그램이 비정상적으로 종료됩니다.
내포된 try-catch 블록을 방문하십시오 .
여러 예외 포착
Java에서 알 수 있듯이 여러 catch 블록을 사용하여 여러 예외를 처리할 수 있습니다.
예 :
catch (IOException ex) {
logger.error(ex);
throw new MyException(ex.getMessage());
catch (SQLException ex) {
logger.error(ex);
throw new MyException(ex.getMessage());
}
예 :
catch(IOException | SQLException ex){
logger.error(ex);
throw new MyException(ex.getMessage());
}
즐거운 배움
Mouad Oumous Java WhatsApp 그룹에 가입하세요 .
Mouad Oumous 텔레그램 채널 가입 JOIN
그것을 따라 우리 출판물을 지원하십시오
Spring Boot 시작하기: 초보자를 위한 포괄적인 자습서 Spring Boot 보안 | SSO | OAuth2 with Okta 가장 자주 묻는 Java8 스트림 기반 인터뷰 질문 — 2부 Java 코딩에서 ModelMapper를 사용한 객체 매핑 가이드 : Flatten an Array in Javascript 가장 많이 묻는 Java8 스트림 기반 인터뷰 질문 — 1부
![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































