2016-08-15 3 views
-7

나는 던지기가 언제 사용되고 던짐이 사용되는지 명확하게 이해하기가 혼란 스럽다. 친절하게 저에게 차이를 보여주기위한 모범을 보여주십시오.자바에서 던지기와 던지기의 차이 - 명확화

또한, 나는 아래의 코드를 시도 :

패키지 AccessModifiers을;

// import java.io.IOException;

공용 클래스 ThrowExceptions {

int QAAutoLevel; 
int QAExp; 

void QAAutomationHiring(int grade) 
{ 
    if (grade<5) 
    throw new ArithmeticException("Not professionally Qualified"); 
    else 
     System.out.println("Ready to be test"); 

} 

void QAExperience(int x,int grade) 
{ 

     QAAutomationHiring(grade); 


} 

void checkThrowsExep(int a,int b) throws ArithmeticException 
{ 
    try{ 
    int result=a/b; 
    System.out.println("Result is :"+result); 
    } 
    catch(Exception e) 
    { 
     System.out.println("The error messgae is: "+ e.getMessage()); 
    } 
} 

public static void main(String args[]) 
{ 
    ThrowExceptions t=new ThrowExceptions(); 
    //t.QAAutomationHiring(8); 
    t.QAExperience(2,8); 
    t.QAExperience(4,2); 

    t.checkThrowsExep(5, 0); 

} 

} 위의 코드에서

, 내가 프로그램을 실행할 때 주요 기능의 라인 - 't.checkThrowsExp은'도달하지 않습니다. 나는 throw와 throw가 예외를 잡아 내고 프로그램 실행을 계속하는 데 사용된다는 것을 연구했다. 그러나 여기에서는 실행이 중단되고 다음 명령문 세트로 진행되지 않습니다. 의견을 공유하십시오.

+1

예외를 throw하려는 경우'throw'가 사용됩니다. 'throws'는 호출자가 무엇을 잡아야 하는지를 알기 위해 던져지는 어떤 예외적 인 예외가 메소드를 선언합니다. – SomeJavaGuy

+3

[Oracle Java Tutorials - Exceptions] (https://docs.oracle.com/javase/tutorial/essential/exceptions/)를 참조하십시오. – Jesper

답변

1

실제로 throw는 예외를 반환하지만 throws는 컴파일러에 대한 서명이므로이 메서드는 예외를 반환 할 수 있습니다.

위의 코드에서 QAExperience의 두 번째 호출에서와 같이 등급이 5보다 낮 으면 ArithmeticException 예외가 생성되어 반환됩니다. 예외를 반환 한 메서드를 호출하는 호출 메서드가 catch 블록에 영향을 미치지 않으므로 실행을 중지하고 main 메서드로 돌아갑니다. 주된 메소드는 예외를 잡아 내지 못하기 때문에 다른 사람들이 실행을 멈추고 예외를 반환하기를 좋아할 것입니다. 이것이 t.checkThrowsExp이 실행되지 않는 이유입니다.

+0

정말 고마워요! QAExperience main 함수를 호출하기 전에 checkThrowsExp 함수를 호출 해 보았습니다. ArithmeticException에 대한 메시지가 표시되었습니다. – Vandee

+0

또한 QAAutomationHiring 함수에서 throw 예외를 둘러싼 try 및 catch 블록을 추가하려고 시도했습니다. 그러면 예외 메시지가 표시되고 다음 단계로 진행됩니다. 이제 요점을 얻었습니다. – Vandee

2

throws 사람들에게 사용되는

경고 :이 방법/생성자는 XXXExceptionYYYException을 던지는 높은 기회가있다! 당신이 그들을 처리하는지 확인하십시오!

예 : 당신이 볼 수 있듯이

public static native void sleep(long millis) throws InterruptedException; 

throws 키워드 sleepInterruptedException 던질 가능성이 매우 높다는 것을 사람들에게 말한다 :로

Thread.sleep 방법이 선언된다. 이 때문에 메서드 호출을 try-catch으로 묶거나 호출자 메서드를 throws InterruptedException으로 표시해야합니다. throws 키워드 이후의 예외 사항은 일반적으로 잘못된 사용자 입력, 데이터베이스 문제 등과 같이 프로그램 즉시 제어가 불가능한 영역의 잘못된 조건으로 인해 "체크 된"예외입니다.

throws XXXExcepion으로 표시하면 결코 XXXException을 보내지 않습니다. 한편 은 예외를 throw합니다. 그것은

throw new RuntimeException("Something went wrong!"); 

그리고 코드 실행이 문에 도달 할 때마다 예외는 상관없이 발생되지 않으며, 메소드가 리턴처럼 사용할 수 있습니다.한마디로

, throw 실제로 던지는 수행하고 throws예외 가능성 (사실, 잘못되는) 던질 것을을 말하는 것입니다.