728x90
반응형
메서드에 예외 선언하기
예외를 처리하는 방법은 3가지가 있는데 본인이 (1)직접 해결(try - catch)하거나 (2)예외를 선언하여(예외 떠넘기기) 다른쪽에 넘기거나, 혹은 (3)은폐(catch문에 공백으로 남기기)하는 법이 있다.
메서드에 예외를 선언한다는 것은 아래와 같이 메서드에 throws를 붙여 발생할 수 있는 에러의 종류를 나열하는 것이다
- 아래 메서드 method에는 arithmeticexceptoin이나 (or) index초과 오류가 날 수도 있다는 것을 정의
- 따라서 메서드안에서 아래의 에러를 처리할 수 있는 try - catch를 선언하던지 혹은 호출한 쪽으로 에러를 떠넘기던지 둘 중에 하나의 액션을 취해야 한다.
- 주의할 점은 main안의 throw가 아닌 throws로 s를 붙여서 선언해야한다.
void method() throws ArithmeticException, IndexOutOfBoundsException {
}
메서드에 예외를 선언할 때 메서드마다 예외처리를(try - catch)를 하지 않으면 호출했던 클래스, main 클래스로 되돌아가 오류를 반환하면서 프로그램을 비정상 종료시킨다.
- 이때 메인클래스도 throws Exception을 추가하여야 정상적으로 컴파일이 된다.
- Exception오류가 발생할 수도 있다는 것을 정의해야되기 때문
package Lecture;
public class MethodException {
public static void main(String[] args) throws Exception {
method(); //메서드를 호출
// 오류를 처리할 방법이 없어서 프로그램 비정상종료
}
static void method() throws Exception {
method2(); //메서드를 호출받아 메서드2를 호출
// 오류를 반환받았지만 try -catch문이 없어 다시 main클래스로 오류를 반환
}
static void method2() throws Exception {
throw new Exception(); //호출받은 메서드가 오류가 발생하여 다시 메서드로 오류를 반환
}
}
메서드에 예외 선언하기 예시
File 클래스를 사용해 새 파일을 만드는 과정에서 만약 생성하는 확장자가 .txt 파일이 아니라면 오류를 생성해 호출한 메인 클래스로 되돌아가서 try - catch로 오류를 해결하는 과정이다
- 메인 클래스에서 생성한 메서드를 호출
- 호출한 메서드에 매개변수 2개를 입력하여 파일을 생성
- 만약 매개변수가 공백이거나 .txt확장자가 아니라면 오류를 생성하여 메인 클래스로 오류를 반환함
- 왜냐하면 메서드에 try-catch를 선언하지 않았기 때문 (메서드 예외 선언)
- 반환한 오류를 try - catch로 해결하여 원하는 문구 정상 출력 후 프로그램 정상 종료
- 만약 프로그램대로 txt 확장자에 중복되는 파일이 없다면 파일 정상 생성 후에 프로그램 종료
package Lecture;
import java.io.File;
public class MethodException{
public static void main(String[] args) throws Exception{
try {
filecreate("C:\\Users\\gram\\Desktop\\새 폴더", "test.txt");
}
catch (Exception e) {
System.out.println("파일을 .txt 형식으로 다시 입력해주세요");
}
}
static void filecreate(String path,String filename) throws Exception{
File f = new File(path + "\\" + filename);
if(filename == null || !filename.endsWith(".txt")) {
throw new Exception();
}
else if(f.isFile()) {
if(f.getName().equals(filename)) {
System.out.println(f.getName() + "와 동일한 파일명의 파일이 이미 존재합니다");
}
}
else {
try {
f.createNewFile();
System.out.println(f.getName() + "파일 생성완료");
// 이 때 test.txt 파일을 생성하기 위해서는 경로에 생성이름과 확장자명을 적어야 생성된다.
}
catch (Exception e) {
e.getMessage();
}
}
}
}
finally
프로그램을 실행하고 오류와 상관없이 무조건 실행되는 문장을 finally 구문에 넣는다
따라서 아래의 코드는 어떤 결과던 상관없이 프로그램이 정상종료된다면 "프로그램이 종료됩니다" 구문이 출력된다.
public class MethodException{
public static void main(String[] args) throws Exception{
try {
filecreate("C:\\Users\\gram\\Desktop\\새 폴더", "test.txt");
}
catch (Exception e) {
System.out.println("파일을 .txt 형식으로 다시 입력해주세요");
}
finally {
System.out.println("프로그램을 종료합니다");
}
}
728x90
반응형
'Java > 자바의정석 기초편' 카테고리의 다른 글
자바의 정석 8장 (23일차) - 연습문제 (try-catch로 숫자게임 반복하기) (0) | 2022.02.14 |
---|---|
자바의 정석 8장 (22일차) - 사용자 정의 예외처리 & 예외 되던지기 & 연결된 예외 처리(Chained Exception) (0) | 2022.02.13 |
자바의 정석 8장 (20일차) - 프로그램 오류 (0) | 2022.02.09 |
자바의 정석 7장 (19일차) - 7장 연습문제 (객체지향 2) (0) | 2022.02.08 |
자바의 정석 7장 (18일차) - 인터페이스 static & default (0) | 2022.02.06 |