가벼운 error(프로그램이 동작할 때 문제가 발생하더라도 계속적인 실행이 가능한 에러)
개발자는 프로그램이 동작할 때 가벼운 에러를 예측하고, 그에 대한 대비코드를 만들어야 한다.
Exception : 가벼운 문제상황.
프로그램이 동작 중에 exception이 발생하면, exception처리 후 다음 코드로 진행할 수 있다.
Error : 심각한 문제상황.
프로그램이 동작 중에 error가 발생하면 프로그램은 더 이상 실행될 수 없음.
compile exception과 runtime exception 두 가지로 구분되어 제공.
compile exception : bytecode가 제대로 생성되지 못할 상황에서 발생하는 예외. IDE에서 알려줌.
runtime exception : 생상된 bytecode를 사용하여 저장하고 연산하는 도중에 발생하는 예외. IDE에서 안알려줌.
compile time

발생된 예외를 잡을 때 사용.
Compile Exception 반드시 try~catch 처리해야하고,
Runtime Exception은 try~catch를 하지 않아도 에러가 발생하지 않는다.
try{
예외발생예상코드;
}catch(예외처리클래스 객체명){
예외가 발생했을 때 처리할 코드.
}
try{
int i = Integer.parseInt("2024");
예외가 발생하지 않을 때 실행되어야 할 코드 정의;
}catch(NumberFormatException nfe){
예외가 발생했을 때 사용자에게 제공할 코드 정의;
}
개발자가 예외처리 코드를 누락할 수 있다.
ArithmeticException : 수에 관련된 예외 - 0으로 나눌 때 발생
ArrayIndexOutOfBoundsException : 배열에 존재하지 않는 인덱스를 사용할 때
StringIndexOutOfBoundsException : 문자열에 존재하지 않는 인덱스를 사용할 때
IndexOutOfBoundsException : java.util.List에서 존재하지 않는 인덱스를 사용할 때.
NumberFormatException : 숫자가 아닌 문자열을 숫자로 변환할 때.
NullPointerException : 객체를 생성하지 않고 사용할 때.
catch안에서 예외처리 객체가 제공하는 예외메시지를 출력할 수 있다.
Exception객체에서 제공
예외메시지는 비 정상상태의 출력이므로 System클래스의 err필드를 사용하여 출력한다. => System.err.println(예외메시지 출력);
간단한 예외메시지 출력 - 모든 예외처리 클래스에서 사용할 수 있다.
String msg = 예외객체명.getMessage();
예외처리 클래스와 메시지
예외객체명 => 예외객체명.toString();과 같다.
자세한 예외메시지 출력 - 예외발생 라인수, 예외와 관련된 모든 클래스를 추적하여 출력.
예외객체명.printStackTrace(); //콘솔에 출력까지 해주는 메소드.
예외 발생 예상코드가 try~catch내 여러 개가 있을때, catch를 여러 개 정의.
try{
예외발생예상코드;
}catch(예외처리클래스 객체명){
}catch(예외처리클래스 객체명){
}finally{
반드시 실행되어야할 코드;
}
method안에서 발생된 예외를 던질 때 사용.
throws로 던져진 예외는 호출하는 곳에서 try~catch로 처리해야 한다.
예외발생 예상 코드와 예외처리 코드를 분리할 때 사용.
method 뒤에 정의
throws로 던져진 예외는 method안에서 try~catch할 필요가 없다.
throws 예외처리클래스.
접근지정자 반환형 method명(매개변수,,,)throws 예외처리클래스들,,,{
a코드
예외발생 예상코드
b코드 //a에서 예외가 발생하면 실행되지 않는다.
}
* 호출 *
try{
method명(값,,,);
}catch(예외처리 클래스명 객체명){
}
특정상황에서 예외를 발생시켜 업무를 처리해야할 때.
try~catch, throws와 함께 사용.
사용자 정의 예외처리 클래스와 주로 함께 사용.
throw new 예외처리클래스(); //error발생하므로 try~catch로 감싸든지, throws 날려(권장.) 사용
사용자 정의 예외처리클래스
개발자가 구현하는 업무에 맞는 예외처리 클래스를 직접 생성하여 사용하는 것.
상속으로 구현.
Compile Exception, RuntimeException을 만들 수 있다.
Compile Exception
Exception 상속
RuntimeException
RuntimeException 상속
개발자가 자원해제(close)를 하지 않아도 Compiler가 자동으로 try에서 자원을 해제해주는 문법.
close하지 않으면, 메모리 누수가 발생 : 프로그램이 동작하지 않는 원인이 된다.
사용된 모든 자원이 해제되므로 static인 자원을 사용할 때에는 주의해야 한다.(System.in)
try(자원 사용객체){
자원사용객체 사용하는 코드정의;
}catch(예외처리클래스 객체명){
예외발생 처리 코드 정의.
}
Java API에서 입력과 출력을 할 수 있는 클래스들.
단방향 Stream(읽기는 읽기만, 쓰기는 쓰기만 가능).
java.io패키지에서 관련 Stream 클래스들을 제공.
8bit stream(byte 기반 스트림), 16bit stream(문자열 기반 스트림)으로 제공.
8bit stream : 모든 종류의 데이터를 읽거나 쓸 수 있다.
16bit stream : 독자 포멧이 없는 문자열 데이터만 읽거나 쓸 수 있다.