자바기초(예외처리)

bitna's study note·2022년 5월 8일
0

자바

목록 보기
71/119

5월 6일 내용정리

1.실행예외: 프로그램 실행 도중에 예외가 발생하면 JVM은 해당하는 실행 예외 객체를 생성한다.
실행 예외는 컴파일러가 예외처리 여부를 확인하지 않기 때문에 개발자가 예외처리 코드의 추가 여부를 결정해야한다.

2.일반예외: 컴파일러는 일반 예외가 발생할 가능성이 있는 프로그램을 발견하면 컴파일 오류를 발생시킨다.
따라서 개발자는 이런 프로그램에서는 예외처리코드를 반드시 추가해야한다.

3.Exception 은 모든 실행예외의 최고 조상이다.

4.classCastException 억지로 타입 변환 시도할때 발생하는 예외

5.try{예외가 발생할 가능성이 있는 문장}
catch(예외클래스 참조변수){예외가 발생할 때 처리할 문장}...catch문은 여러개 쓸수 있음
finally(예외클래스 참조변수){예외 상황이든 아니든(예외여부 관계없이)항상 실행할 문장}

6.다중 catch문을 쓸경우 조상예외클래스가 자식예외클래스보다 아래에 둬야함
왜? 컴터는 위에서 아래로 실행 하기 때문에 조상예외를 위에두면 조상예외에서 다잡아서
아래 자식예외가 실행이 안됨

7.다중 예외처리
try{예외가 발생할 가능성이 있는 문장}
catch(예외클래스1 | 예외클래스2 참조변수){예외가 발생할 때 처리할 문장}

8.자동리소스 닫기: try-with-resources
예외 발생 여부와 상관없이 사용했던 리소스 객체(각종 입출력 스트림,서버소켓,소켓,각종채널..)의 close()메서드를 호출해서 안전하게 리소스를 닫아줌

package study_0506;

public class ExceptionTest {
	public static void main(String[] args) {
	
	int[] array= {0,1,2};
	try {
		System.out.println("마지막원소=>"+array[3]);
		System.out.println("첫번째원소=>"+array[0]); //위에 실행문에서 예외가 발생했으므로 이 실행문은 실행 안됨
	}catch(ArrayIndexOutOfBoundsException e) {
		System.out.println("원소가 존재하지 않습니다.");
	}
	System.out.println("아얏!");
 
}
}

9.예외떠넘기기
메서드를 호출한 곳으로 예외 떠넘기기
즉,예외발생시 현재의 메서드에서 처리하지 않고 메서드를 호출한 곳으로 가서
발생한 예외를 대신처리해 달라고 떠남기는것

package study_0506;

public class TryCatchDemo {

	public static void main(String[] args) {
		Reso reso =new Reso();
		
		try(reso){
			reso.show();
		}catch(Exception e) {
			System.out.println("예외 처리");
		}

	}

}	
class Reso implements AutoCloseable{
		void show() {
			System.out.println("자원사용");
			}
		
		public void close() throws Exception{
			System.out.println("자원 닫기");
		}

}

10.사용자정의 예외 클래스 선언
자바표준 API에서 제공하지 않는 예외
애플리케이션 서비스와 관련된 예외

11.Exception예외 컴파일러가 체크하는 일반 예외 필수적으로 예외처리(try-catch)

12.RuntimeException예외-컴파일러가 체크하지 않는 예외, 실행예외(선택적 예외)

13.사용자정의 예외 클래스 정의
public class 변수명Exception extends Exception {
public 변수명Exception(){} //생성자-1
public 변수명Exception(String message){ //생성자-2
super(message)
}
}

14.throw:예외발생시키기
throw new 변수명Exception();
throw new 변수명Exception("예외발생 이유를 넣는다.");

15.예외 정보 얻기
getMessage():예외를 발생시킬 때 생성자 매개값으로 사용한 메세지를 리턴
throw new 변수명Exception("예외발생 이유를 넣는다."); -->여기에 있는 메세지를 리턴

16.printStackTrace()
예외 발생 코드를 추적한 내용을 모두 콘솔에 출력 프로그램을 테스트하면서 오류를 찾을 때 활용

17.개발자가 개발할 때 예외 발생 코드를 추적하기 위해 사용하면 좋음
개발이 끝난 후에는 반드시 주석 처리하거나 삭제를 한다.

package study_0506;

public class Account {
	
	private long balance;
	
	public Account() {}
	
	//잔고 읽어 가져가기
	public long getBalance() {
		return balance;
	}
	
	//잔고 값 넣기
	public void setBalance(long balance) {
		this.balance = balance;
	}
	
	//입금
	public void deposit(int money) {
		balance+=money;
	}
	
	//출금-사용자 정의 예외 떠 넘기기
	public void withdrow(int money) throws BalanceInsufficientException{
		if(balance<money) {
			//예외발생시키기
			throw new BalanceInsufficientException(
					"예금잔고부족:"+(money-balance)+"금액이 부족합니다.");
		}
		balance-=money;
	}	
}
package study_0506;

public class AccountExam {

	public static void main(String[] args) {
		Account myAccount =new Account();
		myAccount.deposit(10000);
		System.out.println("예금액:"+myAccount.getBalance());
		try {
//			myAccount.withdrow(1000); 출금 -1000원
			myAccount.withdrow(20000);
		} catch (BalanceInsufficientException e) {
			//e.printStackTrace(); 에러의 자세한 사항을 알고싶을때
			System.out.println("예외발생");
			String message = e.getMessage();
		}
	}

}
package study_0506;

public class BalanceInsufficientException extends Exception{
	
	public BalanceInsufficientException() {}
	public BalanceInsufficientException(String message) {
		super(message);
	}
}
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글

관련 채용 정보