[ 목차 ]
728x90
반응형
2. 예외 처리(Exception)
오류(error)
자바 컴파일러에 의해 문법 오류를 발생
예외(exception)
문법이 맞게 작성되었다 하더라도 프로그램을 실행하면서 예상하지 못한 오류가 발생
프로그램 실행 중 비정상적으로 종료
예측할 수 있는 예외, 예측 못하는 예외
✔ 예외가 발생하는 원인
- 사용자가 잘못된 데이터를 입력하는 경우
- 개발자가 로직이나 계산을 잘못 작성한 경우
- 하드웨어나 네트워크가 제대로 동작하지 못하는 경우
- 악의적으로 잘못된 연산을 요구하거나 시스템을 공격
예외의 종류 - 예외 상황에 맞춰 문제를 처리하기 위해 다양한 예오처리가 있다.
- 컴파일시에 예외 발생
- 런타임시에 예외 발생
[Exception] // 모든 예외를 처리
[IOExcerption] [FileNotFoundException] ... [RuntimeException]
예외처리 코드
try{
실제 코드가 들어가는 곳으로 예외 상황이 발생할 가능성이 있는 코드
....
예외 발생!
.... <------ 예외가 발생하면 이곳으로 오지 않음
....
}catch(예외객체타입1 참조변수1){
try 블록에서 예외 객체 타입1의 Exception이 발생하면 여기로 오게 됨
해당 코드를 실행 후 에러없이 벗어남
......
}catch(예외객체타입1 참조변수1){
try 블록에서 예외 객체 타입1의 Exception이 발생하면 여기로 오게 됨
해당 코드를 실행 후 에러없이 벗어남
......
}
...
finally{ // 무조건 실행하는 문장으로 필수는 아니다.
try블록에서 Exception 발생과 관계없이 무조건 실행되는 코드(옵션)
}
public class Exception3 { // 캄파일시 발생하는 에러
public static void main(String[] args) {
try {
Class obj = Class.forName("com.koreaot.test");
} catch (ClassNotFoundException e) {
e.printStackTrace(); // 어떤 예외가 발생했는지 알려줌
}
System.out.println("프로그램이 정상적으로 종료되었습니다.");
}
}
public class Exception1 {
public static void main(String[] args) {
try {//실제 코드가 들어가는 곳으로 예외 상황이 발생할 가능성이 있는 코드
// int num=10;
// int result =num/0;
// System.out.println(result);
// String str = null;
// System.out.println(str.length());
// int [] num = new int[3];
// num[0] =100;
// num[3] =10;
String str = "천";
System.out.println(Integer.parseInt(str));
} catch (ArithmeticException ae) {
System.out.println("0으로 나눈 예외상황 발생");
} catch (NullPointerException ne) {
System.out.println("객체를 정의하지 않음");
} catch (ArrayIndexOutOfBoundsException ae) {
System.out.println("인덱스를 벗어남!");
} catch (NumberFormatException nfe) {
System.out.println("숫자로 변환하지 못한다");
} catch (Exception e) {
// 여러 예외상황이 있으면 가장 마지막에 작성해야한다.
//모든 예외를 처리하는데 다른 예외가 하위에 있으면 오류가 발생하기 때문이다.
System.out.println("모든 예외를 처리!");
}
System.out.println("프로그램을 정상적으로 종료합니다.");
}
}
문제.
Scanner로 입력을 받아 해당 데이터가 숫자면 숫자를 출력, 문자면 -1을 출력하는 프로그램을 만들어보자
(단, 예외처리를 사용하여 작성)
import java.util.InputMismatchException;
import java.util.Scanner;
public class ExceptionTask {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int value = 0;
try {
System.out.println("숫자를 입력하세요 : ");
value = sc.nextInt();
} catch (InputMismatchException im) {
value = -1;
} finally {
System.out.println("value : " + value);
}
}
}
✔ throw
강제로 예외를 발생시키고자 할 때 사용
현재 메소드의 예외를 처리한 후 상위 메소드에 예외 정보를 전달함
강제로 예외를 방생시키는 방법
Exception 참조변수 = new Exception("예외가 발생하면 출력될 문자열")
...
...
throw 참조변수; // 예외발생!
public class Exception4 {//throw 예제
public static void main(String[] args) {
Exception e = new Exception("예외를 발생합니다!!!");
try{
throw e; // 강제로 예외를 발생시킴
}catch (Exception ex){
ex.printStackTrace();// 어떤 예외가 발생했는지
}
System.out.println("프로그램이 정상적으로 종료");
}
}
✔ throws
현재 메소드에서 자신을 호출한 상위 메소드로 예외를 발생시킴
사용하는 메소드를 호출한 상위 메소드에서 예외처리에 대한 책임을 맡김
public class Exception5 {//throws 예제
public static void main(String[] args) throws Exception {
method1();// 끝까지 책임을 회피하면 JVM이 처리한다.
//이러면 어떤 에러가 나는지 모른다.
}
public static void method1() throws Exception{
method2();
}
public static void method2() throws Exception{
method3();
}
public static void method3() throws Exception{
System.out.println("method3() 호출!");
Exception e = new Exception("예외발생");
throw e;
}
}
반응형
'Java > Java' 카테고리의 다른 글
자바 영어단어장 (0) | 2022.10.07 |
---|---|
자바 File 다루기 (1) | 2022.10.07 |
국비지원 자바 복습 9(Generic, 컬렉션 프레임워크) (0) | 2022.10.06 |
국비지원 자바 복습 8(래퍼, 추상 클래스, 인터페이스, static) (1) | 2022.10.05 |
국비지원 자바 복습 7 (객체의 배열, Object, 상속, 업/다운 캐스팅) (1) | 2022.10.04 |