시스템 레벨의 심각한 오류
시스템 수정으로 문제를 해결
프로그램 레벨의 일반적인 오류
코드 수정으로 문제를 해결
-예외를 처리할 때 사용하는 코드
-실행할 코드는 try 블록에 두고 예외를 처리할 코드는 catch 블록에 두는 방식
-try블록의 코드를 실행하다가 예외가 발생되면 발생된 예외는 자동으로 catch블록으로 전달된다
-모든 예외는 자바 클래스로 만들어져 있다
형식
try {
실행코드
} catch(예외 타입 선언 )
예외처리 코드
}
예시
try {
String name = "tom";
Integer.parseInt(name); // 발생한 NumberFormatException을 catch 블록으로 Java가 던진다.
} catch(RuntimeException e) {//RuntimeException,Exception 가능
System.out.println("예외발생");
}
1.try-catch문의 마지막 블록으로 추가할 수있다.(생략 가능)
2. 예외 발새 여부와 상관없이 "항상 마지막" 에 처리된다.
3.주로 어떤 자원을 반납 (close) 할 때 사용된다
형식
try {
실행 코드
} catch(
예외 타입 선언 )
예외 처리 코드
} finally {
무조건 실행되는 코드
}
예시
Scanner sc=null;//선언
//나이를 입력 받아서 "주류 구매 가능","주류 구매 불가능" 출력하기
try {
sc=new Scanner(System.in);//생성
System.out.println("나이를 입력하시오");
int age=sc.nextInt();
System.out.println((age>19)? "주류 구매 가능":"주류 구매 불가능");
}
catch(Exception e){
System.out.println("숫자를 입력하시오");
}finally {
sc.close();//finally는 주로 자원 반납용으로 사용한다.
}
}
1.예외 객체를 직접 생성(new)해서 던질 때 사용한다.
2. Java는 예외로 판단하지 않는 것들을 던질 때 사용한다.
3. 개발자가 직접 예외를 처리할 때 사용한다.
형식
try {
if(
예외 상황이면 )
throw new
RuntimeException 예외 메시지
}
} catch(
RuntimeException e) {
System.out.println
e.getMessage ()); // 예외 메시지
}
예시
Scanner sc=null;
try {
sc=new Scanner(System.in);
System.out.println("나이를 입력하시오");
int age=sc.nextInt();
if(age<0||age>100) {throw new RuntimeException();}//직접 RuntimeException을 발생시켜서 던진다.
System.out.println((age>19)? "주류 구매 가능":"주류 구매 불가능");
}
catch(Exception e){
System.out.println("숫자를 입력하시오");
}finally {
sc.close();
}
}
1.메소드에서 발생하는 모든 예외를 던질 때 사용한다.
2. 메소드 내부에서 try-catch를 처리하지 않고, 메소드를 호출하는 곳으로 예외를 던질 때 사용한다.
3. 메소드를 호출하는 곳에서 try-catch를 처리한다.
Unchecked Exception
ArithmeticException
산술연산의 문제로 인해 발생 (0 으로 값을 나누는 경우
ClassCastException
어떤 객체를 변환할 수 없는 클래스타입으로 변환 ( 하는 경우에 발생
IndexOutOfBoundsException
배열의 인덱스가 범위를 벗어난 경우에 발생
NullPointerException
null값을 참조하는 경우에 발생 (null 값으로 메소드를 호출할 때
NumberFormatException
String을 Number 타입으로 변환하지 못하는 경우에 발생
Checked Exception
ClassNotFoundException
클래스를 찾을 수 없는 경우에 발생
FileNotFoundException
파일을찾을 수 없는 경우에 발생
NamingException
자원(Resource) 의 이름을 확인할 수 없는 경우에 발생
IOException
입출력 동작이 실패하는 경우에 발생
SQLException
데이터베이스 처리가 실패하는 경우에 발생
메소드 내부에서 예외를 처리
public class
ThrowsEx
public static void method() {
try {
메소드
내부 코드
} catch(Exception e) {
예외
처리 코드
}
}
public
static void main(String[] args )
method
}
}
메소드 외부로 예외를 던짐
public class
ThrowsEx
public static void method() throws Exception {
메소드
내부 코드
}
public
static void main(String[] args )
try
method
}
catch(Exception e) {
예외
처리 코드
}
}
}
예시
//print 메소드 정의
//throws NullpointerException: 메소드를 호출할 때 NullPointerException 처리가 필요하다.
public static void print(String str)throws NullPointerException
{
System.out.println("첫 글자:"+str.substring(0,1));
System.out.println("나머지 글자:"+str.substring(1));
}
public static void main(String[]args)
{
try {
//print 메소드 호출
print("홍길동");
print(null);
}catch(NullPointerException e) {
System.out.println(e.getMessage());
}
}
좋은 정보 감사합니다