1. 예외는 무엇입니까?
먼저 아래 그림의 예를 살펴 보겠습니다.
이 예에서 오류 코드는 0으로 나누어서 존재합니다. 예외 0으로 나누어 : Arithmeticexception
HelloException.java
package com.yiibai.tutorial.exception; public class helloException {public static void main (String [] args) {System.out.println ( "3"); //이 부서는 문제가 없습니다. int 값 = 10 / 2; System.out.println ( "2"); //이 부서는 문제가 없습니다. 값 = 10 / 1; System.out.println ( "One"); //이 부서는 0으로 나눈 문제가 있습니다. // 여기서 오류가 발생했습니다. 값 = 10 / 0; // 다음 코드는 실행되지 않습니다. System.out.println ( "가자!"); }}이 예제를 실행하면 다음이 발생합니다.
콘솔 화면에서 알림을 볼 수 있습니다. 코드 줄에 대한 정보를 포함하여 오류 알림이 매우 명확합니다.
아래 그림의 프로세스를 통해 다음 프로그램을 살펴 보겠습니다.
위에서 언급 한 실시 예의 코드를 수정합니다.
hellocatchexception.java
package com.yiibai.tutorial.exception; public class hellocatchexception {public static void main (string [] args) {System.out.println ( "3"); //이 부서는 문제가 없습니다. int 값 = 10 / 2; System.out.println ( "2"); //이 부서는 문제가 없습니다. 값 = 10 / 1; System.out.println ( "One"); 시도 {//이 부서는 문제가 있습니다. 0으로 나뉘어 진 문제가 있습니다. // 여기서 오류가 발생했습니다. 값 = 10 / 0; // 다음 코드는 실행되지 않습니다. System.out.println ( "value =" + value); } catch (arithmeticexception e) {// 캐치 블록의 코드는 System.out.println ( "error :" + e.getMessage ()); // 캐치 블록의 코드는 System.out.println ( "무시 ...")으로 실행됩니다. } //이 코드는 System.out.println ( "가자!")으로 실행됩니다. }}샘플 결과 실행 :
삼
둘
하나
오류 : / 0으로
무시하다...
갑시다!
예제 이미지의 흐름에 따라 다음 절차를 설명합니다.
2. 예외 계층 <br /> 이것은 Java 예외의 계층 적 그래프의 모델입니다.
가장 높은 클래스는 다음과 같습니다. Throwable
두 개의 직접 서브 클래스는 오류 및 예외입니다.
Java에서 확인되지 않은 컴파일 시간 예외를 포함하여 예외 전송에는 runtimeexception 서브 클래스가 있습니다. 구현 예제의 다음 섹션에 설명 된대로 컴파일 시간에 확인을 확인하고 취소하십시오.
참고 : 수업은 두 가지 분기에서 상속해야합니다. 오류 또는 예외는 직접 던질 수 없습니다.
가상 기계는 동적 링크가 실패하거나 가상 시스템의 다른 "하드"실패가 발생할 때이 오류가 발생합니다. 일반적인 Java 프로그램은 오류를 포착하지 않으므로 Java 프로그램은 오류를 던지지 않습니다. 대부분의 프로그램은 예외 클래스에서 파생 된 개체를 던지고 캡처합니다. 예외는 문제를 나타내지 만 이러한 문제는 심각한 체계적인 문제가 아닙니다. 당신이 쓰는 대부분의 프로그램은 예외를 던지고 포착합니다.
예외 클래스는 Java 패키지의 많은 서브 클래스를 정의합니다. 이 서브 클래스는 다른 유형의 예외가 발생할 수 있음을 나타냅니다. 예를 들어, NegativeArraysizeexception은 프로그램이 음수 크기의 배열을 생성하려고한다는 것을 나타냅니다.
Java 언어에서 감독의 서브 클래스의 특별한 의미 : Runtimeexception 클래스는 Java 가상 머신에서 발생하는 예외를 나타냅니다. 런타임 예외의 예는 NullyiibaiErexception 예외이며, 메소드가 Null 참조를 통해 객체의 구성원에 액세스하려고 할 때 제기됩니다. Nullyiibaierexception은 객체를 해석하려는 프로그램이 어디서나 나타날 수 있습니다. 예외 확인의 이점은 종종 비용보다 훨씬 큽니다.
런타임 예외는 전능하므로 항상 (읽을 수없고 인재 할 수없는 코드) 항상 잡거나 지정하는 것은 쓸모가 없기 때문에 컴파일러는 런타임 예외가 잡히지 않고 지정할 수 있도록 허용합니다.
Java 패키지는 여러 runtimeexception 클래스를 정의합니다. 다른 사람들과 마찬가지로 이러한 예외를 포착 할 수 있습니다. 그러나 런타임 예외를 던지도록 지정할 방법이 필요하지 않습니다. 또한 자신만의 runtimeexception 서브 클래스를 만들 수 있습니다. 런타임 예외 - 아래 논의에는 런타임 예외를 사용하는시기와 방법에 대한 심층적 인 논의가 포함되어 있습니다. 3. try-catch를 사용하여 예외를 처리하십시오
예외에서 상속 된 클래스를 작성하십시오.
AgeException.java
package com.yiibai.tutorial.exception.basic; public class ageException 확장 예외 {public ageException (문자열 메시지) {super (메시지); }} gooyoungexception.javapackage com.yiibai.tutorial.exception.basic; public class gooyoungexception 확장 ageException {public gooyoungexception (문자열 메시지) {super (메시지); }} TooLodException.java
package com.yiibai.tutorial.exception.basic; public class toooldexception 확장 ageException {public toooldException (문자열 메시지) {super (메시지); }} Ageutils 클래스의 연령을 확인하는 정적 방법.
ageutils.java
패키지 com.yiibai.tutorial.exception.basic; public class ageutils {//이 방법은 나이를 확인합니다. // 나이가 18 세 미만인 경우, 방법은 예외를 던지게됩니다. 새로운 TooyoungeXception을 던지십시오 ( "Age" + Age + "Too Young"); } else if (나이> 40) {// 나이가 40보다 큰 경우 예외가 발생합니다. //이 메소드는 여기서 끝납니다. New TooldException ( "Age" + age + "너무 오래된")을 던지십시오. } // 연령이 18-40 사이 인 경우. //이 코드가 실행됩니다. System.out.println ( "Age" + age + "Ok!"); }} 예외 및 확인되지 않은 예외를 확인하십시오.
AgeException은 예외이며, ToooldException의 서브 클래스 및 DooyoungeXception2의 서브 클래스는 AgeException의 직접 서브 클래스이므로 "확인 된 예외"입니다.
ageutils.checkage (int) 메소드는 예외를 던졌으며 키워드 "Throws"를 통해 메소드 선언을 나열해야합니다. 또는 더 많은 레벨을 던지라고 선언 할 수 있습니다.
ageutils.checkage (int) 위치도 예외를 포착하거나 계속 던지기 위해 처리되어야합니다.
"Checked Exception"은 "Java Compiler"에 의해 확인됩니다.
두 가지 옵션이 있습니다.
trycatchdemo1.java
package com.yiibai.tutorial.exception.basic; public class trycatchdemo1 {public static void main (string [] args) {System.out.println ( "모집 시작 ..."); // Age System.out.println을 확인하십시오 ( "나이 확인"); int age = 50; try {ageutils.checkage (Age); System.out.println ( "You Pass!"); } catch (gooyoungexception e) {// 여기에서 뭔가를합니다 .. System.out.println ( "당신은 너무 어리고 통과하지 않습니다!"); System.out.println (e.getMessage ()); } catch (toooldException e) {// 여기에서 뭔가를합니다 .. System.out.println ( "당신은 너무 오래되어 지나가지 않습니다!"); System.out.println (e.getMessage ()); }}} 다음 예에서는 상위 클래스를 통해 예외 (hyperexception 클래스)를 포착합니다.
trycatchdemo2.java
package com.yiibai.tutorial.exception.basic; public class trycatchdemo2 {public static void main (String [] args) {System.out.println ( "모집 시작 ..."); // Age System.out.println을 확인하십시오 ( "나이 확인"); int age = 15; 시도 {// 여기에 너무 oldexception 또는 gooyoungexception ageutils.checkage (age)를 던질 수 있습니다. System.out.println ( "You Pass!"); } catch (ageException e) {// 예외가 발생하면 AgeException의 유형 //이 캐치 블록은 System.out.println ( "나이가 유효하지 않으면 통과하지 않음"); System.out.println (e.getMessage ()); }}} 다른 예외는 논리 프로그램과 동일한 방식으로 처리되면 처리하기 위해 블록으로 그룹화 할 수 있습니다.
trycatchdemo3.java
package com.yiibai.tutorial.exception.basic; public class trycatchdemo3 {public static void main (String [] args) {System.out.println ( "모집 시작 ..."); // Age System.out.println을 확인하십시오 ( "나이 확인"); int age = 15; 시도 {// 여기에 너무 oldexception 또는 gooyoungexception ageutils.checkage (age)를 던질 수 있습니다. System.out.println ( "You Pass!"); } catch (TooyoungeXception | theoldexception e) {// 한 블록에서 멀티 예외를 잡습니다. System.out.println ( "당신의 나이가 유효하지 않아, 당신은 통과하지 않습니다"); System.out.println (e.getMessage ()); }}} 4. 토치를 시도합니다
우리는 시도-캐치 블록을 통해 오류를 잡는 데 익숙합니다. 예외를 완전히 처리하려면 재 시도합니다.
{// 여기에서 뭔가를 해요} catch (Exception1 e) {// 여기에서 무언가를 수행합니다} catch (Exception2 e) {// 여기에서 뭔가를합니다} 마침내 {// 마지막으로 블록이 항상 실행됩니다. // 여기에서 무언가를 수행합니다} trycatchfinallydemo.java
package com.yiibai.tutorial.exception.basic; public class trycatchfinallydemo {public static void main (String [] args) {String text = "001234a2"; int value = tointeger (텍스트); System.out.println ( "value =" + value); } public static int tointeger (문자열 텍스트) {try {system.out.println ( "시작 텍스트 시작 :" + 텍스트); // 예외는 여기에 던질 수 있습니다 (NumberFormateXception). int value = integer.parseint (텍스트); 반환 값; } catch (numberformatexception e) {// '텍스트'의 경우 숫자가 아닙니다. //이 캐치 블록이 실행됩니다. System.out.println ( "숫자 형식 예외" + e.getMessage ()); // 숫자 formateXception이 발생하면 0을 반환합니다. 반환 0; } 마침내 {system.out.println ( "끝 부분 텍스트 :" + 텍스트); }}}이것은 프로그램의 과정입니다. 마침내 블록은 어떤 상황에서도 항상 실행됩니다.
5. 주변 예외
사람. 자바
package com.yiibai.tutorial.exception.wrap; 공개 클래스 사람 {public static final string male = "male"; 공개 정적 최종 문자열 여성 = "여성"; 개인 문자열 이름; 개인 문자열 성별; 사적인 int 연령; 공개 사람 (문자열 이름, 문자열 성별, int age) {this.name = name; this.gender = 성별; this.age = age; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public String getGender () {return gender; } public void setgender (문자열 성별) {this.gender = 성별; } public int getage () {반환 연령; } public void 설정 (int Age) {this.age = age; }} genderexception.java
package com.yiibai.tutorial.exception.wrap; // gender exception.public 클래스 genderexception 확장 {public genderexception (문자열 메시지) {super (메시지); }} ValidateException 클래스 패키지에는 다른 예외가 있습니다.
ValidateException.java
package com.yiibai.tutorial.exception.wrap; public class validateException 확장 예외 {// 예외 래프 public excaxateException (예외 e) {super (e); }} ValidateUtils.java
패키지 com.yiibai.tutorial.exception.wrap; import com.yiibai.tutorial.exception.basic.ageutils; public class validateutils {public static void checkperson (Person Person)은 validateException {// Age를 확인합니다. // 18-40 사이의 경우 //이 메소드는 너무 폴리 렉스 인식, TooyoungeXception을 던질 수 있습니다. ageutils.checkage (person.getage ()); } catch (예외 e) {// 유효하지 않은 경우 // validateException 으로이 예외를 랩핑하고 새로운 validateException (e)을 던지십시오. } // 그 사람이 여성이라면, 즉 무효. if (person.getgender (). Equals (person.female)) {genderexception e = 새로운 genderexception ( "여성을 받아들이지 않음"); 새로운 ValidateException (e)을 던지십시오. }}} wrapperexceptiondemo.java
package com.yiibai.tutorial.exception.wrap; public class wrapperexceptiondemo {public static void main (string [] args) {// 하나의 참가자 채용. 사람의 사람 = 새로운 사람 ( "결혼", Person.female, 20); {// 예외가 여기에서 발생할 수 있습니다. ValidateUtils.checkperson (사람); } catch (validateException 랩) {// 실제 원인을 얻습니다. // gooyoungexception, toooldexception, genderexception 예외 원인 = (예외) wrap.getCause (); if (원인! = null) {system.out.println ( "전달되지 않음, 원인 :" + ass.getMessage ()); } else {system.out.println (wrap.getMessage ()); }}}}6. runtimeexception 및 서브 클래스 runtimeexception 클래스와 하위 클래스는 "확인되지 않은 예외"입니다. Java 컴파일러가 컴파일 시간에 확인하지 않습니다. 경우에 따라이 지점에서 상속되어 자신의 예외를 작성할 수 있습니다.
아래는 runtimeexception 브랜치에 속하는 일부 클래스입니다 (물론 이것은 전부가 아닙니다).
이 유형의 예외를 처리하는 몇 가지 예 :
6.1- Nullyibaierexception
이것은 가장 일반적인 예외이며 일반적으로 프로그램에서 오류를 유발합니다. 메소드를 호출하거나 빈 객체의 필드에 액세스 할 때 예외가 발생합니다.
Nullyiibaierexceptiondemo.java
package com.yiibai.tutorial.exception.runtime; public class nullyibaierexceptiondemo {// 예를 들어, null 문자열을 반환 할 수있는 메소드가 있습니다. public static string getstring () {if (1 == 2) {return "1 == 2 !!"; } return null; } public static void main (String [] args) {// 이것은 참조가 null이 아닌 객체입니다. 문자열 text1 = "Hello Exception"; // 메소드 호출 문자열 길이를 검색합니다. int length = text1.length (); System.out.println ( "길이 텍스트 1 =" + 길이); // 이것은 null을 참조하는 객체입니다. 문자열 text2 = getString (); // 메소드 호출 문자열 길이를 검색합니다. // NullyiibaiErexection이 여기에서 발생합니다. // 런타임 (runtimeexception 유형)에서 예외가 발생합니다. // Javac Compiler는 try-catch 블록을 사용하여 길이 = text2.length ()를 처리하도록 강요하지 않습니다. System.out.println ( "Finish!"); }}예제 실행 결과 :
실제로 Try-Catch를 사용하여 다른 예외를 처리 할 때와 같이이 예외를 포착하고 처리 할 수 있습니다. 그러나 이것은 기계적이며 일반적으로 객체를 사용하기 전에 숫자가 아닌지 확인해야합니다.
위의 코드를 수정하여 널 포인터 예외를 피하기 위해 다음과 유사하게 만들 수 있습니다.
// 이것은 null 객체입니다 .String text2 = getString (); // 'text2'가 널이 아닌지 확인하십시오.
6.2- ArrayindexOfboundException
이 예외는 유효하지 않은 인덱스로 배열 요소에 액세스하려고 할 때 발생합니다. 예를 들어, 배열에는 액세스 할 10 가지 요소가 있지만 인덱스 20이있는 요소에 액세스하고 있습니다.
ArrayIndexOfBoundSexceptionDemo.java
package com.yiibai.tutorial.exception.runtime; public class arrayindexofboundsexceptiondemo {public static void main (string [] args) {string [] strs = new String [] { "one", "two", "Three"}; // 요소에 대한 액세스는 색인 0입니다. String str1 = strs [0]; System.out.println ( "String at 0 =" + str1); // 요소에 대한 액세스에는 색인 5가 있습니다. // ArrayIndexOfBoundSexception은 여기에서 발생합니다. 문자열 str2 = strs [5]; System.out.println ( "String at 5 =" + str2); }} ArrayindexOfBoundSexception을 피하려면 Try-Catch를 사용하는 것보다 배열을 확인하는 것에 대해 더해야합니다.
if (strs.length> 5) {String str2 = strs [5]; System.out.println ( "String at 5 =" + str2);} else {System.out.println ( "색인 5가있는 요소 없음");}위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.