Java-Clarification中Throw和Throws的区别

时间:2016-08-15 07:14:23

标签: java

我很困惑,清楚地了解使用throw和使用throws的时间。请给我一个展示差异的例子。

另外,我尝试了以下代码:

包AccessModifiers;

// import java.io.IOException;

public class 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);

}

}

在上面的代码中,当我运行程序时,行 - &#39; t.checkThrowsExp&#39;在主要功能未达到。我研究了throw和throws用于捕获异常并继续执行程序。但是这里执行停止,而不是继续执行下一组语句。请分享您的意见。

2 个答案:

答案 0 :(得分:2)

throws用于告诉人们

  

警告:此方法/构造函数很有可能抛出XXXExceptionYYYException!请确保你处理它们!

示例:

Thread.sleep方法声明为:

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

正如您所看到的,throws关键字告诉用户sleep很可能会抛出InterruptedException。因此,您必须使用try-catch包围方法调用,或使用throws InterruptedException标记调用方法。 throws关键字之后的例外通常会被检查&#34;&#34;由程序直接控制之外的区域中的无效条件引起的异常,例如无效的用户输入,数据库问题等。

请注意,标有throws XXXExcepion的方法可能永远不会抛出XXXException

throw,另一方面,实际上会抛出异常。它可以像

一样使用
throw new RuntimeException("Something went wrong!");

每当代码执行到达此语句时,无论如何都会抛出异常,并返回该方法。

简而言之,throw 实际上是投掷,而throws只是可能会抛出异常(事实上,是错的)。

答案 1 :(得分:1)

抛出实际上返回异常,而throws是编译器的符号,此方法可能返回异常。

在上面的代码中,如果等级低于5,则会创建并返回ArithmeticException,这是您第二次调用QAExperience时的情况。 由于调用返回异常的方法的调用方法并不是一个catch块,它也只是停止执行并返回main方法。因为main方法也没有捕获异常,所以就像其他方法一样,它会停止执行并返回异常。这就是为什么t.checkThrowsExp不会被执行的原因。