영보의 SystemOut.log

[JAVA]예외처리(Exception)/예외처리종류/자바기초 본문

Language/JAVA

[JAVA]예외처리(Exception)/예외처리종류/자바기초

영보로그 2020. 7. 20. 11:09
반응형
예외처리 
 - 자바의 모든 소스에는 예외처리가 있다 (생략이 가능, 생략 불가능)
 - 프로그램을 실행하는 과정에서 오작동, 비정상적으로 종료 => 에러 / 오류
 ** 윈도우 : 쓰레드의 충돌, 주소값 
    오작동, 비정상적으로 수행
* 에러가 발생하는 경우
프로그래머의 실수
사용자의 오류 (입력값, 작동을 잘못했을 경우)
예) 33대란 

 

  Checked Exception Uncheck Exception
예외 반드시 예외처리 생략
(필요시에는 예외처리)
확인 시점  컴파일단계 실행 단계
예외발생 시
트랜잭션 처리
roo-back 안함 rollback 함
특징 컴파일러가 예외처리 했는지 확인
▶ 반드시 예외처리를 해야 한다
실행시 ▶ 컴파일러가 예외처리를 확인하지 않는다
예외 처리가 생략이 가능 ▶ 필요한 경우에만 예외처리 할 수 있따

용도 파일 / 메모리 네트워크 입출력
Database 연결
Thread 충돌
사용자 입력 → 문자열 → 정수 변환
사용자 입력  나누기  → 0을 입력
종류 파일입출력
IOException
쓰레드
InterruptedException
URL
MalformedURLException
Database
SQL Exception
IOException
Runtime Exception -> 실행시 에러 (인터프리터)
  - 0으로 나눴을 때 
  - 배열의 크기를 초과했을 때 
  - 정수 변환
  - NullPoint Exception
ClassCast Exception
SystemException
ArrayIndexOutOfBoundsException
ArithmeticException
NumberFormatException

 

 

에러 종류 컴파일 에러 실행시 에러 논리적 에러
에러의 원인 컴파일시에 에러 실행시 발생하는 에러 실행은 되는데 동작은 다르게 애러
문법상의 에러 사용자 입력값이 비정상적이거나 많을때 발생 프로그램의 순서가 틀렸을 때 발생

 

 

  에러  예외
정의 프로그래머가 소스상에서 수정할 수 없는 에러 가벼운 에러 (수정이 가능한 가벼운 에러)
특징  - 메모리 부족현상
 - 이클립스 에러
 - 소스상에서 수정이 가능
 - 사용자가 0을 입력했을 때 → 다시 입력하세요
 - 아이디 중복체크
 - 파일입출력(경로명)
 - 
Oracle( Oracle 주소, SQL)
 - 서버(IP)
처리 처리가 불가능 처리 가능

 

 

  예외처리
목적 프로그램의 비정상 종료를 방지하고 정상상태를 유지할 수 있게 만든다
(견고한 프로그램)
정의 사전에 예상되는 에러를 대비하는 코드를 만든다
방법 1) 예외 복구
2) 예외 회피
3) 예외 임의 발생
4) 사용자 정의 예외 : 자바 라이브러리에서 전체 에러를 지원하지 않는 경우

 

 

예외복구 예외회피 임의발생 사용자정의
try~catch~(finally)

프로그래머가 직접 처리

직접처리
throws

간접처리

( 예외처리 회피는 순서 없다)
throws 발생

test시 직접 에러 방생 해보고 처리
 extends Exception
 점프 → 프로그래머가 예외 발생할 경우에 직접 처리 →정상상태유지

1) 전체 예외 처리
2) 부분적 예외처리
다른 메소드로 전송 → 시스템에 의해서 처리

1) 예측
2) 다른 개발자 예외처리 각자 가능

테스트용  사용자 라이브러리에서 전체 에러를 지원하지 않는 경우 

- 데이터형
→ 직접 데이터형 저장(클래스
- 메소드
→ 사용자가 직접 제작0
 
* try : 평상시 자바 코딩 →에러
* catch : 에러 발생시 처리 부분 → 여러개 사용이 가능
* finally
- 에러 발생을 불문하고 무조건 수행되는 문장
- Network, DB 에서 반드시 존재
- 서버를 연결 해제 

     
정상실행 예외가 발생하였을 경우
try { 

   예외발생 코드

} catch (예외클래스 e){

   예외처리

 }finally{

   항상 처리되는 코드
}
int x=6, y=0;
try{ 
  int result =x/y;
}
 catch(Exception e){
  System.out.println("오류 발생");
}
System.out.println("try/catch 통과");

 

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
32
33
package com.sist.exception;
public class Mainclass4 {
    public static void main(String[] args) {
        try
        {
            int[] arr=new int[2];
            arr[0]=100;
            arr[2]=0;
            
            int a=arr[0]/arr[1];
        }catch(NumberFormatException e)    
        {
            System.out.println("정수변환이 안됨");
        }catch(ArrayIndexOutOfBoundsException e)
        {
            System.out.println("배열 범위가 벗어난경우");
        }catch(ArithmeticException e)
        { 
            System.out.println("0 으로 나눌경우");
        }
        catch(RuntimeException e) //예상 못했던 에러 => 처리
        {
            System.out.println("실행시 모든 에러를 처리");
        }catch(Exception e) // Exception
        {
            System.out.println("수정이 가능한 모든 에러를 처리");
        }catch(Throwable e) //error, Exception 둘 다 처리 가능
        {
            System.out.println("예외와 에러를 동시 처리");
        }
        System.out.println("프로그램 종료!!");
    }
}
cs
반응형