Java Exception(예외처리)
Java Exception(예외처리)
try-catch문
- 컴파일 익셉션 : 컴파일 과정에서 에러
- 런타임 익셉션 : 실행프로그램 구동 중 에러
- try-catch문은 런타임 익셉션 발생
- 아래 예제는 Exception in thread “main” java.lang.ArithmeticException: / by zero 익셉션 발생
public static void main(String[] args) {
int a = 3, b = 0;
int result;
result = a / b;
System.out.println(result);
System.out.println("Done.");
}
try-cath문 사용 방법
- 익셉션이 발생할 것 같은 구문을 try catch 문으로 감싼다
- try는 소스코드를 실행했을 때 에러가 발생할 것 같은 부분을 넣는다
- catch는 에러가 났을 때 처리를 하는 부분이다(여러번 쓸 수 있다)
- finaly는 예외가 일어나든 안 일어나든 실행한다.(생략가능)
- 에러 출력 방법 e.printStackTrace(), e.getMessage()
public class C{
public static void main(String[] args) {
int a = 3, b = 0;
int result;
try{
result = a / b;
System.out.println(result);
}catch(Exception e){
System.out.println("잘못된 연산입니다");
}
System.out.println("Done.");
}
}
try-catch문 순서
- try문에서 예외가 발생하면 아래 소스코드는 실행하지 않는다.그러므로 2번을 제외하고 전부 출력된다
- 만약 10/1이라면 예외가 발생하지 않는다. 그래서 3번빼고 전부 출력된다
public static void main(String[] args) {
int a = 3, b = 0;
int result;
try{
System.out.println("1");
int a = 10/0;
System.out.println("2");
}catch(Exception e){
System.out.println("3");
}finally{
System.out.println("4");
}
System.out.println("5");
}
throws
- throws는 예외발생 처리를 함수 호출한 부분으로 넘긴다
returnvalue functionname() throws Exception
{
}
throws 사용방법
- 예외를 넘길 함수의 인자 옆에 throws Exception 을 추가한다
- 아래 예제에선 main함수에서 add함수를 호출하는데 인자1과 인자2의 더한 값이 0보다 작다면
- throws 발생 시키고 있다.
- add함수가 throws를 발생시키고 있으므로 호출할 때 try-catch 블록안에 넣어야 한다. try문으로 감싸지 않으면 에러가 뜬다
public class Ex{
static void add(int a, int b) throws Exception
{
int sum = a + b;
if(sum < 0){
throw new Exception("음수는 싫어");
}
}
public static void main(String[] args) {
try {
add(10, -20);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
throw
- 함수에 throws 키워드를 안쓰고 그냥 예외를 발생시킬 수 있다
- 아래 예제처럼 그냥 사용하면 에러난다
- throw를 사용하면 사용한 구문을 try-catch 문으로 감싸줘야 한다.
public static void main(String[] args) {
throw new Exception();
}
Exception extends
- Exception을 상속받아 예외 class를 만들어 try-catch문을 강제할 수 있다
- 예외처리할 class를 만들고 Exception클래스를 상속 받는다
- 함수에 throws 예외를 발생시키는데 new Exception 대신 우리가 만든 클래스로 new ExceptionEx 한다
- 예외가 발생할 때 ExceptionEx 생성자가 호출된다
class ExceptionEx extends Exception
{
public ExceptionEx()
{
System.out.println("errorFunc");
}
}
public class C{
static void func() throws ExceptionEx
{
throw new ExceptionEx();
}
public static void main(String[] args) {
try {
func();
} catch (Exception e) {
}
}