자바 이상 설명
이상 하 다 고 말 하기 전에 우 리 는 이상 과 잘못된 차 이 를 알 아야 한다.
Error 클래스 와 Exception 클래스 의 부모 클래스 는 모두 throwable 클래스 입 니 다.그들의 차 이 는:
Error 류 는 일반적으로 가상 컴퓨터 와 관련 된 문 제 를 말한다.예 를 들 어 시스템 붕괴,가상 컴퓨터 오류,메모리 공간 부족,방법 호출 스 택 넘 침 등 이다.이러한 오류 로 인 한 프로그램 중단,
프로그램 자체 만 으로 는 회복 과 예방 이 불가능 하 며,이러한 오류 가 발생 하면 프로그램 을 종료 시 키 는 것 을 권장 합 니 다.
Exception 클래스 는 프로그램 이 처리 할 수 있 는 이상 을 표시 하고 캡 처 할 수 있 으 며 복구 할 수 있 습 니 다.이러한 이상 이 발생 하면 가능 한 한 이상 을 처리 하여 프로그램 이 운행 을 회복 하도록 해 야 지,함부로 이상 을 중지 해 서 는 안 된다.
2.이상 한 표현 분류:
1.checked 이상 검사 기 이상 java.lang.Excetion 은 컴 파일 기간 에 인공 처리 가 필요 합 니 다.그렇지 않 으 면 컴 파일 에 실 패 했 습 니 다.Exception 의 하위 클래스 는 런 타임 이상 을 제외 하고 모두 검사 기 이상 입 니 다.
2.Checked 이상 실행 시 이상 java.lang.Runtime Exception 처리 할 필요 가 없 는 직접 컴 파일 가능:모든 Runtime Exception 및 하위 클래스 가 이상 실행 중 입 니 다.
운행 기간 이상
결과:운행 기간 이 이상 합 니 다.코드 를 다 두 드 렸 을 때 오류 가 발생 하지 않 습 니 다.실행 할 때 만 0 으로 나 눌 수 없 는 오 류 를 보고 합 니 다.
예:검사 기간 이상:
결과:검사 기간 이상,컴 파일 할 때 오류 가 발생 합 니 다.이상 컴 파일 을 던 져 야 통과 할 수 있 습 니 다.
3.이상 한 처리 메커니즘
자바 언어 는 주로 try 에 의존한다. catch finally throws throw 다섯 개의 키워드 로 이상 을 묘사 하 다.
1)이상 발생 시 직접 처리
try catch finally 사용 하기 직접 처리 이상
a) try-catch-finally 구조 에서 try 블록 은 반드시 있어 야 합 니 다.catch 와 finally 블록 은 선택 할 수 있 지만 둘 중 하나 가 있어 야 합 니 다.
b) catch 여러 개 를 동시에 나 타 낼 수 있 지만,한 개 이상 은 최대 한 개의 catch 를 잡 을 수 있 으 며,catch 의 순 서 는 위 에서 아래로
c) finally 이상 캡 처 여부 와 상 관 없 이 실 행 될 코드 입 니 다.
데모 1:try 이상
public class TestException {
public static void main(String[] args) {
int c = 0;
try
{
int a = 3;
int b = 0;
//
c = a / b;
//
System.out.println("Hello World");
}
catch (ArithmeticException e)
{
System.out.println(" ");
}
finally
{
// ,finally
System.out.println("Welcome");
}
System.out.println(c);
// b 0 , , c 0
}
}
// : Welcome 0
try
데모 2:return 이상
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class DemoException {
public static void main(String[] args) {
int a=test3();
System.out.println(a);
}
@SuppressWarnings("finally")
public static int test3(){
try {
System.out.println(9 / 0);
return 1;
} catch (Exception e) {
System.out.println(" ....");
return 2;
}finally{
System.out.println(" ...");
return 3;
}
}
}
// " "" " 3
return
결론:역할 범위 return 전체 방법 체 를 중지 하지만 finally 가 나타 나 기 전에 return 이 짱 이에 요. 최종 작용 범위>return2)이상 을 호출 자 에 게 던 져 호출 자 에 게 처리 하도록 한다.
//throws ...
public void dealFile() throws FileNotFoundException{
FileInputStream fis =new FileInputStream("C:/name.txt");
}
// ,
사례 1:throws 를 통 해 이상 을 던 지고 호출 자 는 이상 을 직접 포착 합 니 다.
public class TestException {
public static void main(String[] args) {
try {
Test3(); // ,
} catch (NumberFormatException e) {
System.err.println(" 。");
} //System.err.println(); , 。
}
public static void Test3() throws NumberFormatException{
String s = "abc";
System.out.println(Double.parseDouble(s));
}
}
throws
실행 결과:비 데이터 형식 은 변환 할 수 없습니다.
메모:Throws 를 사용 하 는 것 은 제한 입 니 다.
두 가지 원칙
throws 성명 을 사용 하여 이상 한 제한 을 던 집 니 다.
하위 클래스 가 부 류 를 계승 하여 부 류 를 다시 쓰 는 방법
하위 클래스 에서 던 지 는 이상 은 부모 클래스 보다 적어 야 합 니 다.
하위 클래스 에서 던 지 는 이상 은 부모 클래스 보다 작 아야 합 니 다.
두 가지 원칙 은 검사 기간 이상,운행 기간 이상 에 대해 이 규칙 을 따 르 지 않 는 다 는 것 이다(Runtime Exception 및 하위 클래스).
사례 2:throw 를 통 해 이상 던 지기
public class TestException {
public static void main(String[] args) {
String s = "abc";
if(s.equals("abc")) {
throw new NumberFormatException(" ");
} else {
System.out.println(s);
}
}
}
throw
실행 결 과 는 다음 과 같 습 니 다.면접 문제:Throw 와 Throws 는 어떤 차이 가 있 습 니까?
Throw 문 구 는 방법 체 내 에서 던 진 이상 을 나타 내 는 방법 체 내의 문 구 를 처리 합 니 다.
Throws 문 구 는 방법 성명 후에 이상 을 던 져 서 던 진 이상 을 호출 자 에 게 맡 기 는 것 이다.
Throws 는 try Ccatch Cfinally 로 처리 하거나 계속 던 집 니 다.
4.사용자 정의 이상
사용자 정의 이상 이란 보통 하나의 클래스 를 정의 하여 Exception 클래스 나 하위 클래스 를 계승 하 는 것 입 니 다.예외 적 으로 Exception 류 를 직접 또는 간접 적 으로 계승 해 야 하기 때문이다.
통상 적 으로 Exception 류 에서 직접 계승 되 며,일반적으로 어떤 운행 시의 이상 류 를 계승 하지 않 는 다.
사용자 정의 이상 은 사용자 로그 인 오류,사용자 입력 오류 알림 등에 사용 할 수 있 습 니 다.
사용자 정의 이상 은 다음 절 차 를 따라 야 합 니 다.
4
public class MyException extends Exception
{
public MyException()
{
super();
}
public MyException(String message)
{
super(message);
}
}
처리 이상 방식
public class ExceptionTest4
{
public void method(String str) throws MyException
{
if(null == str)
{
throw new MyException(" null!");
}
else
{
System.out.println(str);
}
}
public static void main(String[] args) throws MyException // 1,
{
ExceptionTest4 test = new ExceptionTest4();
test.method(null);
}
}
다른 이상 처리 방법:
public class ExceptionTest4
{
public void method(String str) throws MyException
{
if (null == str)
{
throw new MyException(" null!");
}
else
{
System.out.println(str);
}
}
public static void main(String[] args)
{
// 2, try...catch
try
{
ExceptionTest4 test = new ExceptionTest4();
test.method(null);
}
catch (MyException e)
{
e.printStackTrace();
}
finally
{
System.out.println(" ");
}
}
}
마지막 으로 한 마디 하 자 면 try-catch-finally 는 사용 하기 좋 지만 남용 이 라면 프로그램의 가 독성 을 엉망 으로 만 들 뿐 프로그램 이 잘못 보고 되면 빠 르 고 정확 한 포 지 셔 닝 을 할 수 없다.이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.