예외처리에 대해 알아보자.
Try Catch(예외처리)
자바에서 프로그램이 실행되는 도중에 예외(에러)가 발생하면 그 시점에서 프로그램이 강제로 종료된다.
원래는 프로그램을 디버깅(Debugging) 해서 오류를 수정한 뒤 실행하는것이 원칙이지만, 때로는 예상할 수 있는 가벼운 오류(숫자를 0으로 나눔:불능, 0 을 0으로 나눔:부정)가 있거나, 예외가 발생했을때도 프로그램이 종료되지 않고 그 이후의 프로세스를 진행시키는 것이 더 좋을 때도 있다. 일종의 FailSafe 기법으로 볼 수 있다. 예외처리를 통해 프로그램의 비정상적인 종료를 줄이고 정상적으로 프로그램이 계속 진행될 수 있도록 할 수 있다.
==> 미리 try ~ catch ~문을 의식하지 말고 일반적인 프로그램을 작성한뒤, 오류가 있을곳으로 예상되는 곳에 try ~ catch~ 문은 거의 공식적으로 정해져 있다.
catch (Exception e){
e.printStackTrace, e.~}
문으로 작성해준다.
예외처리는 프로그램 실행에서 발생할 수 있는 에러에 대해서 미리 대응을 해주는 것이다. 에러가 발생하면 전용 예외 클래스 Exception 오브젝트가 생성된다.
try(에러가 날 곳 예상),
catch(에러 발생 시 에러 메시지 등),
finally(실제 처리)를 사용해서 기술한다. throws를 통해서 메써드에서 일어날 수 있는 예외 클래스를 지정하는데 메써드를 호출한 곳에 이 예외를 받아 줄 catch가 없으면 컴파일 에러가 뜬다.
ERROR
package java11;
public class Test03 {
public static void main(String[] args) {
int n = 0;
int result = 0;
result = 10/n; // Here you can see error
System.out.println(result);
}
}

package java11;
public class Test03 {
public static void main(String[] args) {
int n = 0;
int result = 0;
try {
result = 10/n; // Here you can see error
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
System.out.println("Error occurred");
}
System.out.println(result);
}
}

package java11;
public class Test04 {
public static void main(String[] args) {
int[] var = {10, 20, 30};
for (int i = 0; i <= var.length; i++) {
System.out.println("var["+ i +"] = "+var[i]);
}
System.out.println("프로그램 끝");
}
}

package java11;
public class Test04 {
public static void main(String[] args) {
int[] var = {10, 20, 30};
try {
for (int i = 0; i <= var.length; i++) {
System.out.println("var["+ i +"] = "+var[i]);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("배열 범위 초과 오류");
}
System.out.println("프로그램 끝");
}
}

package java11;
import java.util.Scanner;
public class Test05 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.print("정수 :");
int number = 0;
try {
number = sc.nextInt();
System.out.println("결과:"+number);
} catch (Exception e) {
System.out.println("정수만 입력할 수 있습니다.");
}
}
}

package java11;
import java.util.Scanner;
public class Test06 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("정수를 입력하세요.");
String str = "";
try {
str=sc.next();
System.out.println(Integer.parseInt(str)+"은 정수 입니다.");
} catch (Exception e) {
System.out.println(str+ "은(는) 정수가 아닙니다.");
}
}
}

finally
finally(실제 처리)를 사용해서 기술한다. throws를 통해서 메써드에서 일어날 수 있는 예외 클래스를 지정하는데 메써드를 호출한 곳에 이 예외를 받아 줄 catch가 없으면 컴파일 에러가 뜬다.
package java0808;
import java.util.prefs.BackingStoreException;
public class Test03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
back(args[0]); // 하나의 인자를 필요로 하는 back() 메써드 호출
} catch (Exception e) {
System.out.println("메써드의 인수가 없어요");
e.printStackTrace(); // 에러의 내용을 보임
} finally {
System.out.println("종료합니다....");
}
}
static void back(String a) throws Exception{ // 인자를 주어서 메써드 back() 정의,
// 여기서 오류가 있을때 여기서 처리하지 말고 호출한 곳으로 가서 처리를 받아라.
System.out.println(a);
}
}

'JAVA' 카테고리의 다른 글
| [JAVA] getter와 setter (0) | 2022.08.02 |
|---|---|
| [JAVA] Thread (0) | 2022.08.01 |
| [JAVA]인터페이스, 열거형, 내부클래스 (0) | 2022.07.29 |
| [JAVA]Object, 제네릭 클래스, 추상 메써드 (0) | 2022.07.28 |
| [JAVA] 상속 (0) | 2022.07.27 |
댓글