티스토리 뷰
* 예외처리
▷ 소스를 작성할 때, 에러가 발생될 수 있는 상황이 있다.
ex)
10 / num
if(num != 0)
10/num <-- 미연에 에러를 방지하자!
▷ 예외처리 : 프로그램 진행될 때, 에러에 의해서 갑자기 소스가 중단되는 일을 방지하고
계속 소스를 진행해서 정상적으로 프로그램에서 종료될 수 있게 함
▷ 예외 : Exception (에러)
- NullPointerException : 값이 null 상황에서 처리를 하려고 한다.
- ArithmeticException : 0으로 나눌 때
- FileNotFoundException : 파일 입출력에서 파일이 없을 때
- ArrayIndexOutOfBoundException : 배열의 요소 범위를 초과했을 때,
...
▷ 처리 : 디버거에 에러상황을 맡김
try{
에러가 날만한 상황
}catch(에러상황 변수){ <--- 에러가 발생하면.. catch로 가져온다(debugger)
변수(객체).메서드() ; 해당 결과 내용을 볼 수 있다.
}
소스1
소스2
# 실습
package exceptionex;
import javax.swing.JOptionPane;
/*
에러가 나면 처리해 주고
다음 소스로 넘어간다
try{
}catch(){
}
*/
public class ExceptionTest {
public static void main(String[] args) {
int num = Integer.parseInt(JOptionPane.showInputDialog("정수입력"));
try{
System.out.println(10/num);
}catch(ArithmeticException e){
System.out.println("이 문구를 봤다면 num에 0을 넣은 것이다");
e.printStackTrace();
// error를 보고싶을 때 사용한다
}
System.out.println("연산결과 확인 1");
System.out.println("연산결과 확인 2");
}
}
# 중간에 0이 아닌 정수 한번 더 입력 가능 소스
package exceptionex;
import javax.swing.JOptionPane;
public class ExceptionTest {
public static void main(String[] args) {
int num = Integer.parseInt(JOptionPane.showInputDialog("정수 입력"));
try{
System.out.println(10/num);
}catch(ArithmeticException e){
num= Integer.parseInt(JOptionPane.showInputDialog("0이 아닌 수를 입력하세요"));
System.out.println(10/num);
}
System.out.println("연산 결과 확인1");
System.out.println("연산 결과 확인2");
}
}
# 반복해서 0이 아닐때 까지 만든 소스 ( 반복문 )
package exceptionex;
import javax.swing.JOptionPane;
public class ExceptionTest2 {
public static void main(String[] args) {
String msg = "정수 입력";
while(true){
int num = Integer.parseInt(JOptionPane.showInputDialog(msg));
try{
System.out.println(10/num);
break;
}catch(ArithmeticException e){
msg="0이 아닌 수를 입력하세요";
}
}
System.out.println("연산 결과 확인1");
System.out.println("연산 결과 확인2");
}
}
# 여러개의 catch문
package exceptionex;
import javax.swing.JOptionPane;
/*
여러개의 catch 문
try{
소스1
소스2
소스3
}catch(){
}catch(){
}catch(){
}catch(){
}
*/
public class ExceptionTest4 {
public static void main(String[] args) {
String msg="정수 입력";
while(true){
int num=0;// 지역변수가 되므로 밖으로 빼서 사용
try{
num = Integer.parseInt(JOptionPane.showInputDialog(msg));
System.out.println(10/num);
break;//정상적인 데이터가 들어오면 정지
}catch(ArithmeticException e){// exception의 상위 (잘 모르겠으면 주로 exception를 사용)
msg=" 0이 아닌 정수를 넣어야 합니다";
}catch(NumberFormatException e){
msg=" 숫자(정수)를 입력하세요 ";
}catch(Exception e){
// 나머지 에러처리
}
}
System.out.println("연산결과 확인 1");
System.out.println("연산결과 확인 2");
}
}
# throws
package exceptionex;
import java.io.FileNotFoundException;
import javax.swing.JOptionPane;
/*
다른 메서드를 사용하다 보면 반드시 에러처리를 해야
메서드를 사용할 수 있는 경우가 있다
-checked exception
-throws : 메서드를 만들 때 붙인다
그럼, 호출하는 쪽에서 try ~catch 를 통해서
에러 처리를 한다
- 주로 파일 입출력, db 연동 등에서 자주 출현한다
- 직접 만들어 보기
void 메서드A() throws 예외클래스,예외클래스 {
}
호출
try{
메서드A();
}catch(예외클래스1 e){
}catch(예외클래스2 e){
}
*/
class CallName{
static void callYourName() throws FileNotFoundException{
System.out.println("철수야 뭐해~?");
}
}
public class ExceptionTest5 {
public static void main(String[] args) {
//new CallName().callYourName();
try {
CallName.callYourName();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace(); // error 확인
}
}
}
# 실습
package exceptionex;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.JOptionPane;
class ReadChar{
static char getChar() throws IOException{
char ch=' ';
ch=(char)System.in.read();
return ch;
}
}
public class ExceptionTest6 {
public static void main(String[] args) {
//char myChar;//정리를 안해놨기때문에 쓰레기값
char myChar= ' ';//지역변수는 초기화를 해서 대입을 해주어야함
try {
myChar = ReadChar.getChar();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("입력 받은 문자 :"+myChar);
}
}
'Programing > Java' 카테고리의 다른 글
Java2 - 03. 패키지 Object - Equals (0) | 2017.05.11 |
---|---|
Java2 - 02. 패키지 Object- toString (0) | 2017.05.11 |
Java1 - 22. 다형성 (0) | 2017.05.10 |
Java1 - 21. 재정의(override) (0) | 2017.05.10 |
Java1 - 20. Inheritance(상속) (0) | 2017.05.04 |