외부에서 생성자를 직접 생성하지 못하도록 하기 위해 사용
public class Test{
private static Test instance = new Test();
private Test(){}
// 현재 객체를 생성해서 리턴하는 메소드를 만든다.
public static Test getInstance(){
return instance;
}
}
public class App {
public static void main(String[] args) {
Test t = new Test(); // 오류
// 오류 안남 but t1과 t2는 동일하다. Test의 멤버필드인 instance를 가리키기 때문이다.
Test t1 = Test.getInstance();
Test t2 = Test.getInstance();
}
}
try{
// 발생 가능성이 있는 코드 작성;
}catch(XxxException e){ // catch 여러개 작성할때는 반드시 최하위 서브클래스부터 작성해야한다.
// 예외1 발생 했을 때 해야하는 일 작성;
}catch(XxxException e){
// 예외2 발생 했을 때 해야하는 일 작성;
}catch(XxxException e){
// 예외3 발생 했을 때 해야하는 일 작성;
}finally{
// 예외 발생 여부와 상관없이 무조건 실행해야하는 일 작성
}
// 아래와 같이 사용도 가능, 단 catch와 finally는 항상 try와 함께 사용
try {
} finally{
}
try {
} catch(XxxException e){
}
e.toString()
예외 클래스 : 예외 메시지로 구성
e.getMessage()
예외메시지 가져오는 메소드
e.printStackTrace()
예외메시지를 Stack 저장하고 Stack에 저장된 메시지를 꺼내서 출력해주는 메소드
※ e.printStackTrace() 이용 주의 사항
- 개발할 때 예외가 발생하면 예외에 대한 정보를 정확하게 추적할 수 있는 정보를 제공한다.
- 배포할 때 (운영환경 - production) 반드시 제거해야 한다. secure code 가이드라인에 의거하여 보안을 위해서!!!
throw
강제로 예외를 발생시킨다.
메소드를 호출한 주체에게 예외를 위임하는 것, 메소드 선언부에 작성
원하는 예외를 만들기 위해 Exception을 상속받아 사용자 정의 Exception class를 만들 수 있다.
// 체크 예외
class XxxException extends Exception {
XxxException(){}
XxxException(String message){
super(message); // Exception(String message) 생성자 사용
}
}
// 비체크 예외
class XxxException2 extends RuntimeException {
}
new XxxException();
new XxxException("오류 메시지");