티스토리 뷰

Programing/Java

Java2 - 01. 예외처리

HNNN 2017. 5. 10. 17:36

 


* 예외처리
 
▷ 소스를 작성할 때, 에러가 발생될 수 있는 상황이 있다.


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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
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
26 27 28 29 30 31
글 보관함