티스토리 뷰
코딩을 하면 예외처리는 필연적이다.
1
2
3
4
5
6
7
8
9
10
11 |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int intArr[] = new int [2];
intArr[3] = 10;
}
}
|
cs |
'intArr' 배열의 인덱스 범위는 2까지로 선언 하였다.
만약 3번째 인덱스에 어떠한 값 '10'을 넣으면 어떻게 될까 ?
당연히 오류메시지와 함께 디버깅창으로 넘어가게 된다.
메모리의 접근 방법이 잘못되었기에 에러문구가 뜨게 된다.
많은양의 코딩을 하다가 이러한 실수는 사람인지라 나타나기 마련이다.
이를 위한 해결법에는 TRY-CATCH-FINALLY 문이 있다.
try 블록 안에는 에러가 날수 있는 부분을 넣어주고, catch 문에는 에러가 발생했을때 수행해야할 부분을 넣어주게되면 에러가 발생하더라도 catch문의 내용을 수행하고 정상적으로 프로그램을 종료 하게된다.
아래 예시를 보면 이해하기 쉽다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int intArr[] = new int [2];
try{
intArr[3] = 10;
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println("범위를 초과하였다.");
System.out.println(e.getMessage());
}
}
}
|
cs |
intArr[3] = 10; ==> 앞서 말한거와 같이 이부분은 'intArr' 배열의 해당하지 않는 첨자 '3' 번째를 건드렸기 때문에 에러가 발생할수 있으므로 try 블록 안에 넣어준다.
System.out.println("범위를 초과하였다."); ==> 에러가 발생했을때 수행하는 부분이므로 catch 블록 안에 넣어준다.
e.getMessage() ==> 이 문구는 에러의 종류를 알려주는 메소드 이다. 논리적 예외발생하였거나 , 배열의 범위를 초과하였을 경우등을 알려준다.
2번째 예시를 들어보겠다.
이번에는 숫자 4를 0으로 나누는 예외처리이다.
운영체제도 일을 수행할때 가장 먼저 수행하는것이 /0 이 있는지 검사를 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try{
System.out.println(4/0);
}
catch(ArithmeticException excep)
{
System.out.println("당신이 0으로 나우었습니다.");
System.out.println(excep.getMessage());
}
}
}
|
cs |
마찬가지로 에러가 날 문구에는 try문에 , 에러가 발생하였을때 수행할 부분을 catch문에 넣어주면 된다. 참고로 finally블록은 쓸일이 없을경우 생략하여도 무방하다.
try는 항상 catch와 한쌍이다.
자주 발생하는 예외 3가지이다.
1. NumberFormatException 숫자가 아닌 형태의 값을 숫자로 변경하려할때
2. ArrayIndexOutOfBoundsException 배열의 범위를 벗어났을때
3.ArithmeticException 논리가 잘못되었을때
예제를 풀어보자!
예제 : try-catch 문을 이용하여 정수를 0으로 나누려고 할때 0으로 나눌수 없습니다. 라는 경고 메시지를 출력하도록 프로그램작성하기
소스코드 ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// try-catch 문을 이용하여 정수를 0으로 나누려고 할때 0으로 나눌수 없습니다. 라는 경고 메시지를 출력하도록
//프로그램작성하기
Scanner A = new Scanner(System.in);
int buffer,d ;
System.out.print("나뉨수를 입력하시오:");
buffer = A.nextInt();
System.out.print("나눗수를 입력하시오:");
d = A.nextInt();
try{
buffer = buffer / d;
System.out.println(buffer);
}
catch(ArithmeticException e){
System.out.println("0으로 나눌 수 없습니다.");
}
}
}
|
cs |
출력화면
'IT > JAVA' 카테고리의 다른 글
[정보올림피아드] 197번 (0) | 2017.07.10 |
---|---|
메소드 오버로딩 (Method overloading) (0) | 2017.07.10 |
main메소드 안에 args는 무엇일까 ? (0) | 2017.07.06 |
[정보 올림피아드] 151번 (0) | 2017.07.06 |
[정보 올림피아드] 150번 (0) | 2017.07.06 |