我很困惑,清楚地了解使用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用于捕获异常并继续执行程序。但是这里执行停止,而不是继续执行下一组语句。请分享您的意见。
答案 0 :(得分:2)
throws
用于告诉人们
警告:此方法/构造函数很有可能抛出
XXXException
和YYYException
!请确保你处理它们!
示例:
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
不会被执行的原因。