본문 바로가기

Not Using/JAVA

JAVA의 예외처리


Error/Exception
-Error:운영체제나 프로세스에 문제가 생겨서 프로그램적으로 어떤 조치되 취할 수 없는 상황
 -OutofMemory
 -StackOverflow
 -etc,.
  <<<<<<<<개발자가 손쓸수 없는 영역

-Exception:프로그램 실행 중에 발생한 문제를 코드를 통해서 체크, 다른 코드들을 보호하기 위한 장치
 -ArrayIndexOutofBoundsException
 -NumberFormatException
 -etc
<<<<<<<<<<<<개발자가 손쓸수 있는 영역


예외의 종류
-checked VS unchecked Exception

 -코드를 작성 할 때 컴파일러가 check하는 예외처리 -checked Exception
    -주로 JVM과ㅏ 외부 리소스와 통신하는 경우에 처리하도록한다.
    -Eclipse와 같은IDE는 자동적으로 체크하는 기능을 가지고 있다.

 -컴파일러가 체크하지 않지만 실행할 때 발생하는 Exception - unchecked Exception(ex.사용자가 예상치못한 값을 입력할 경우)
   -주로 문자열 작업,배열,숫자처리 등에서 발생한다.
   -개발자가 직접 처리해야만 한다.

-예제

import java.util.Scanner;


public class ExceptionEx {

 public void doA(){
  System.out.println("우선 숫자를 좀 입력해주세요");
  Scanner scanner =  new Scanner(System.in);
 
  int value=100;
  int x = Integer.parseInt(scanner.nextLine());
 
  System.out.println(value/x);
  
  System.out.println("AAAAAAAAAAAA");
  System.out.println("AAAAAAAAAAAA");
  System.out.println("AAAAAAAAAAAA");
  System.out.println("AAAAAAAAAAAA");
  

 }
 public static void main(String[] args) {
  ExceptionEx ex = new ExceptionEx();
  ex.doA();
 }
}

----->만일 x값으로 0이나 문자를 입력하는 경우 AAA는 찍지도 않음... 문제있는 코드 아래로는 실행안하는 문제가 발생하므로
문제가 발생할 수 있는 코드부분을 예외처리 해줌으로써 프로그램 멈춤을 방지함.

 

import java.util.Scanner;


public class ExceptionEx {

 public void doA(){
  System.out.println("우선 숫자를 좀 입력해주세요");
  Scanner scanner =  new Scanner(System.in);
 
  int value=100;
 
  try{
   int x = Integer.parseInt(scanner.nextLine());
   
   System.out.println(value/x);
   
  }catch(Exception e){
   System.out.println("잘못입력이되었다네요..");
   e.printStackTrace(); //어느코드에서 잘못되었는지 보여주는 메소드
  }
   
  System.out.println("AAAAAAAAAAAA");
  System.out.println("AAAAAAAAAAAA");
  System.out.println("AAAAAAAAAAAA");
  System.out.println("AAAAAAAAAAAA");
  

 }
 public static void main(String[] args) {
  ExceptionEx ex = new ExceptionEx();
  ex.doA();
 }
}


------------------->try~catch로 잘못입력된 부분에 대해서는 언급을 해주고 아래코드는 정상적으로 실행시켜줌.


NullPointException(Unchecked)
-객체 자료형에서만 발생
-어떤 변수에 실제 객체의 레퍼런스(리모콘)이 없는 상태에서 변수를 통해서 어떤 작업을 하는 경우
-Java의 경우에는 반드시 '.'에서만 발생한다.

따라서!!!NEP가 발생했을경우 .을 찾으면 된다!


ArrayIndexOutOfBoundsException(Unchecked)
-배열의 인덱스 번호가 배열의 범위를 초과해서 접근하는 경우
 -int[] arr ={1,2,3}; //index번호는 0,1,2만 가능
 -arr[3];  //실행할 때 문제 발생


NumberFormatException(Unchecked)
-문자나 날짜 데이터를 숫자형태로 변환 할 때 발생하는 Exception

Integer.parseInt(" ");

checked Exception의 원칙
-주로 JVM과 외부의 리소스가 통신을 하는 경우에 일어난다.
 -네트워크를 통한 통신
 -파일 시스템을 사용하는 작업 등
-checked Exception은 실행하는 데 있어서 외부의 간섭이 일어나는 경우에 일어난다.
 -운영체제의 설정이나 상황이 간섭을 일으킬 수 있는 경우