자바 기본-이상

무엇이 이상 합 니까?
이상 은 현재 방법 이나 역할 영역 이 계속 실행 되 는 것 을 막 는 문 제 를 말한다.이상 대상(Exception 과 Error 포함)은 모두 Throwable 의 하위 클래스 대상 으로 모두 버 릴 수 있 습 니 다.다른 것 은 Exception 은 JVM 에서 보 낸 이상 알림 으로 처리 할 수 있 습 니 다.Error 는 운영 체제 에서 보 내 는 이상 한 알림 입 니 다.Error 가 발생 하면 원본 코드 를 수정 해 야 합 니 다.
이상 처리 메커니즘
자바 에서 이상 처리 체 제 는 두 가지 가 있 는데 각각 이상 을 던 지고 이상 을 포착 하 는 것 이다.
이상 을 던지다
한 방법 에 오류 가 발생 하여 이상 을 일 으 킬 때 방법 은 이상 대상 을 만 들 고 실행 시 시스템 에 전달 합 니 다.이상 대상 에는 이상 유형 과 이상 이 발생 할 때의 프로그램 상태 등 이상 정보 가 포함 되 어 있 습 니 다.실행 시 시스템 은 이상 한 코드 를 찾 아 실행 합 니 다.
포획 이상
방법 에 이상 을 던 진 후,실행 할 때 시스템 은 적합 한 이상 처리 장치(exception handler)를 찾 는 것 으로 전 환 됩 니 다.잠재 적 인 이상 처리 장 치 는 이상 이 발생 했 을 때 호출 스 택 에 순서대로 저장 하 는 방법의 집합 이다.이상 프로세서 가 처리 할 수 있 는 이상 형식 이 방법 이 던 진 이상 형식 과 일치 할 때 적합 한 이상 프로세서 입 니 다.실행 시 시스템 은 이상 이 발생 하 는 방법 부터 스 택 에 있 는 방법 을 차례대로 찾 아 이상 처리 장 치 를 포함 하 는 방법 을 찾 아 실행 합 니 다.실행 할 때 시스템 이 스 택 을 옮 겨 다 니 며 적당 한 이상 처리 장 치 를 찾 지 못 하면 실행 시 시스템 이 종 료 됩 니 다.자바 프로그램의 종 료 를 의미한다.
이상 한 시스템 소개
(사진 은 도 모 에서 왔 다)
자바 는 표면적 인 대상 언어 로 서 이상 도 대상 으로 처리 된다.Throwable 클래스 는 모든 이상 클래스 의 루트 입 니 다.두 개의 하위 클래스 인 Error 클래스 와 Exception 이 있 습 니 다.Error 클래스 는 모든 error 형식의 부모 클래스 이 며,하위 클래스 는 VirtualMachineError 와 IOError 가 있 습 니 다.Exception 클래스 는 모든 exception 유형의 부모 클래스 로,하위 클래스 는 크게 Runtime Exception(NullPointer Exception,Index OutOf Bounds Exception,IllegalArgument Exception 등)과 비 Runtime Exception(IOException,SQLException 등)으로 나 뉜 다.
이상 처리 방식
Error 에 대해 우 리 는 처리 할 방법 이 없고 잘못된 코드 만 고 칠 수 있 습 니 다.Exception 에 대해 서 는 throws 키 워드 를 사용 하여 방법 에 이상 이 생 길 수 있 습 니 다.그리고 호출 방법 을 사용 할 때 try-catch 문 구 를 사용 하여 던 진 이상 을 포착 하고 해당 하 는 처 리 를 할 수 있 습 니 다.
예 1:
우 리 는 먼저 다음 코드 를 실행 합 니 다.
public class Main {

    public static void main(String[] args) {
        div(4, 0);
        System.out.println("           ");
    }

    public static int div(int a, int b) {
        return a / b;
    }
}

결 과 는 다음 과 같다.
Exception in thread "main"   
java.lang.ArithmeticException: / by zero
    at com.xxx.Main.div(Main.java:11)
    at com.xxx.Main.main(Main.java:6)
    ...

메 인 스 레 드 에서 0 으로 나 누 는 산술 이상 이 발생 합 니 다.또한 div 방법 에서 의 문 구 는 실행 되 지 않 았 고 프로그램 이 이상 한 문 구 를 실 행 했 을 뿐 임 을 설명 합 니 다.다음은 이상 을 처리 하 겠 습 니 다.코드 를 아래 코드 에 따라 수정 하 다.
public class Main {

    public static void main(String[] args) {
        try {
            div(4,0);
            System.out.println("           ");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
            System.out.println("    ");
        }
    }

    public static int div(int a, int b) throws   
    ArithmeticException{
        if(b == 0) {
            throw new ArithmeticException("     0");
        }
        return a / b;
    }
}

우 리 는 방법 div 뒤에서 산술 이상 을 던 질 수 있다 고 성명 했다.throws Arithmetic Exception.그 다음 에 잘못된 문 구 를 try-catch 문장의 try 에 넣 고 catch 에서 캡 처 한 이상 과 추적 을 표준 오류 흐름 으로 출력 합 니 다:e.printStackTrace().getMessage()방법 으로 얻 은 오류 정 보 를 인쇄 합 니 다.사용자 가 이상 을 더 잘 이해 할 수 있 도록 저 희 는 이상 대상 을 만 들 고 이상 정 보 를 적어 서 던 집 니 다.문장:throw new ArithmeticException(" 0");결 과 는 다음 과 같다.
     0
java.lang.ArithmeticException:      0
    
    at com.xxx.Main.div(Main.java:18)
    at com.xxx.Main.main(Main.java:7)

우 리 는 이상 한 정 보 를 발견 하여 사용자 정의 로 만 들 었 다.
예 2:
때때로 우 리 는 약간의 이상 을 사용자 정의 해 야 한다.아래 코드 를 참조 하면 스스로 한 번 사용자 정의 할 수 있다.여기 try-catch 문 구 는 try-catch-finally 문 구 를 바 꿉 니 다.finally 문 구 는 이상 여부 와 상 관 없 이 실 행 될 구문 블록 입 니 다.
public class Main {

    public static void main(String[] args) {

        Computer computer = new Computer();
        //       ,           ,            
//        try {
//            computer.setStatus("  ");
//        } catch (EnterWaterException e) {
//            e.printStackTrace();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }

        //            catch 
        try {
            computer.setStatus("   ");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("finally");
        }
    }
}
class Computer {

    private String status;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) throws DownException, EnterWaterException {
        this.status = status;
        if (status.equals("   ")) {
            throw new EnterWaterException("   ,   ");
        } else if (status.equals("  ")) {
            throw new DownException("  ,  ");
        }
    }
}

class EnterWaterException extends RuntimeException{
    public EnterWaterException(String message) {
        super(message);
    }
}

class DownException extends RuntimeException{
    public DownException(String message) {
        super(message);
    }
}

이상 사용 시 주의해 야 할 문제
1.runtime 의 이상 은 캡 처 하지 않 고 컴 파일 할 수 있 습 니 다.2.여러 개의 이상 포획,이상 대상 이 부자 관계 가 있 을 때 부류 이상 은 아래 에 써 야 합 니 다.3.여러 개의 이상 이 다른 조작 이 없 으 면 catch 블록 에 합 칠 수 있 고 매개 변 수 는 공 통 된 부모 클래스 를 사용 합 니 다.
더 많은 주의사항 은 자바 의 이상 처리 중의'나 쁜 습관 들'을 참고 하 시기 바 랍 니 다.
흔히 볼 수 있 는 이상
자바 에 서 는 자주 발생 하 는 오 류 를 설명 하 는 데 사용 되 는 이상 을 제공 합 니 다.이러한 이상 에 대해 서 는 프로그래머 가 캡 처 처리 나 성명 을 내 놓 아야 합 니 다.어떤 것 은 자바 가상 컴퓨터 가 자동 으로 캡 처 처 처 처 처 를 해 야 합 니 다.
Runtime Exception 하위 클래스:
1.java.lang.Array Index OutOfBounds Exception 배열 색인 경계 이상.배열 의 색인 값 이 마이너스 이거 나 배열 보다 크 면 큰 시간 에 던 집 니 다.2.java.lang.Arithmetic Exception 산술 조건 이 이상 합 니 다.예 를 들 어 정수 0 등 을 나눈다.3.java.lang.NullPointer Exception 빈 포인터 이상.응용 프로그램 이 사용 대상 을 요구 하 는 곳 에서 null 을 사용 하려 고 할 때 이 이상 을 던 집 니 다.예 를 들 어 null 대상 의 인 스 턴 스 방법 을 호출 하고 null 대상 의 속성 을 방문 하 며 null 대상 의 길 이 를 계산 하고 throw 문 구 를 사용 하여 null 을 던 지 는 등 이다.4.java.lang.Class NotFoundException 에서 클래스 이상 을 찾 을 수 없습니다.문자열 형식의 클래스 이름 구조 류 에 따라 CLASSPAH 를 옮 겨 다 니 면서 해당 하 는 이름 의 class 파일 을 찾 을 수 없 을 때 이 이상 을 던 집 니 다.5.java.lang.NegativeArray SizeException 배열 의 길 이 는 마이너스 이상 6,java.lang.Array StoreException 배열 에 호 환 되 지 않 는 값 이 포 함 된 이상 7,java.lang.security Exception 안전성 이상 8,java.lang.IllegalArgument Exception 불법 매개 변수 이상
IOException
1.IOException:입력 흐름 과 출력 흐름 을 조작 할 때 발생 할 수 있 는 이상.2、EOFException 파일 종료 이상 3、FileNotFoundException 파일 에서 이상 을 찾 을 수 없 음
기타
1.ClassCastException 형식 변환 이상 클래스 2,ArrayStoreException 배열 에 호 환 되 지 않 는 값 이 포 함 된 이상 3,SQLException 작업 데이터베이스 이상 클래스 4,NoSuchFieldException 필드 에서 이상 을 찾 지 못 함 5,NoSuchMethodException 방법 에서 던 진 이상 을 찾 지 못 함 6,NumberFormattException 문자열 을 숫자 로 던 진 이상 7,StringIndex OutOfBounds Exception 문자열 색인 이 범 위 를 초과 하여 던 진 이상 8,IllegalAccessException 은 특정한 이상 9,InstantiationException 에 접근 할 수 없습니다.프로그램 이 Class 클래스 의 new Instance()방법 으로 클래스 의 인 스 턴 스 를 만 들 려 고 할 때 지정 한 클래스 대상 이 예화 되 지 않 을 때 이 이상 을 던 집 니 다.
참고 블 로그:http://blog.csdn.net/hguisu/article/details/6155636 http://www.jellythink.com/archives/1420

좋은 웹페이지 즐겨찾기