2021. 04. 20(火)TIL
Java
例外処理
カスタム例外クラス
カスタム例外クラス
public class MyException extends RuntimeException {
public MyException() {}
public MyException(String message) {
super(message);
}
public MyException(String message, Throwable cause) {
super(message, cause);
}
public MyException(Throwable cause) {
super(cause);
}
}
変換例外
try {
예외발생이 예상되는 코드 // SQLException 이 발생예상됨
} catch (SQLException e) {
throw new 사용자정의예외클래스("메세지", e);
}
強制異常発生
public void login(String id, String password) {
User savedUser = userService.getUser(id);
if (savedUser == null) {
throw new UserNotFoundException("아이디가 존재하지 않습니다.");
}
if (!savedUser.getPasswrd.equals(password)) {
throw new NotMatchedPasswordException("비밀번호가 일치하지 않습니다.");
}
...
}
package day2;
public class HTAUncheckedException extends RuntimeException {
public HTAUncheckedException(String msg) {
super(msg);
}
public HTAUncheckedException(String msg, Throwable couse) {
super(msg, couse);
}
}
package day2;
// 사용자 정의 예외 클래스 작성하기
public class HTACheckedException extends Exception {
public HTACheckedException(String msg) {
super(msg);
}
public HTACheckedException(String msg, Throwable cause) {
super(msg, cause);
}
}
package day2;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ExceptionApp2 {
public static void test1() throws HTACheckedException {
try {
BufferedReader reader = new BufferedReader(new FileReader("src/day2/sample1.txt"));
String text = reader.readLine();
System.out.println("### 파일내용 : "+ text);
reader.close();
} catch (FileNotFoundException cause) {
// FileNotFoundException을 가로채고 대신 HTACheckedException을 발생시킴
throw new HTACheckedException("파일경로가 올바르지 않음", cause);
} catch (IOException cause) {
throw new HTACheckedException("파일 읽기 오류", cause);
}
}
public static Date strToDate(String dateString) throws HTACheckedException {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.parse(dateString);
} catch (ParseException cause) {
throw new HTACheckedException("올바른 날짜 형식이 아닙니다.", cause);
}
}
public static void main(String[] args) {
try {
test1();
Date day = strToDate("2021-12-25");
} catch(HTACheckedException e) {
e.printStackTrace();
}
}
}
package day2;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ExceptionApp3 {
public static void test1() {
try {
BufferedReader reader = new BufferedReader(new FileReader("src/day2/sample1.txt"));
String text = reader.readLine();
System.out.println("### 파일 내용 : " + text);
reader.close();
} catch (FileNotFoundException e) {
throw new HTAUncheckedException("파일경로가 올바르지 않습니다", e);
} catch (IOException e) {
throw new HTAUncheckedException("### 파일읽기 오류 발생하였습니다", e);
}
}
// 강제 발생시킨 HTAUncheckedException 예외는 컴파일러가 예외처리 여부를 체크하지 않는 예외다.
// 따라서, strToDate() 메소드 내부에서 HTAUncheckedException 예외를 강제 발생시켜도
// 예외
public static Date strToDate(String dateString) {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.parse(dateString);
} catch (ParseException cause) {
throw new HTAUncheckedException("올바른 날짜 형식이 아닙니다", cause);
}
}
public static void main(String[] args) {
// test1()과 strToDate() 메소드는 예외처리를 강제하지 않는
// Unchecked예외를 발생시키는 메소드다
// test1()과 strTodate() 메소드를 사용하는 측에서는 예외처리를 하지 않아도 된다.
test1();
Date day = strToDate("2010-01-01");
System.out.println(day);
// 필요에 따라서 예외처리를 일괄적으로 구현해도 상관없다.
try {
test1();
Date day2 = strToDate("2010-01-01");
System.out.println(day2);
} catch(HTAUncheckedException e) {
e.printStackTrace();
}
}
}
Reference
この問題について(2021. 04. 20(火)TIL), 我々は、より多くの情報をここで見つけました https://velog.io/@eastgun_/2021.-04.-20화-TILテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol