Java-throw和throws的区别
1)throw
throw是Java中引入的用于异常处理的关键字。
有时我们可以显式创建异常对象,并且可以手动将它们切换到jvm,因此必须使用throw关键字。
throw关键字的目的是将我们创建的异常对象手动移交给jvm。
示例1:借助throw关键字
class ThrowExample { public static void main(String[] args){ System.out.println(10/0); throw new ArithmeticException("/ by zero"); } }
输出结果
D:\Java Articles>java ThrowExample Exception in thread "main" java.lang.ArithmeticException: / by zero at ThrowExample.main(ThrowExample.java:6)
示例2:没有throw关键字的帮助
class ThrowExample { public static void main(String[] args){ System.out.println(10/0); } }
输出结果
D:\Java Articles>java WithoutThrow Exception in thread "main" java.lang.ArithmeticException: / by zero at WithoutThrow.main(WithoutThrow.java:6)
在示例1中,开发人员负责显式创建异常对象并将对象手动移交给jvm(即,此处的main方法不负责内部创建对象并将其移交给jvm)。我们将通过两种方式获得相同的输出,并且方法不同。
在示例2中,main()
方法负责显式创建异常对象并在内部将对象移交给jvm(即,此处程序员不负责手动创建对象并移交给jvm)。我们将通过两种方式获得相同的输出,并且方法也不同。
throw关键字用于从Java中的任何方法或静态块引发异常。
throw关键字的最佳用途是针对用户定义或自定义的异常。
throw关键字仅适用于Throwable对象。
2)throws
throws是Java中引入的用于异常处理的关键字。
在我们的程序中,如果有引发检查异常的可能性,则必须执行检查异常,否则我们将得到编译时错误(即,必须捕获或声明抛出未报告的异常xxx(异常名称位于xxx))。
范例1:
import java.io.*; class ThrowsExample{ public static void main(String[] args){ PrintWriter pw = new PrintWriter("java.txt"); pw.println("welcome in java world"); } }
输出结果
D:\Java Articles>javac ThrowsExample.java ThrowsExample.java:6: error: unreported exception FileNotFoundException; must be caught or declared to be thrown PrintWriter pw = new PrintWriter("java.txt"); ^ 1 error
我们可以使用throws关键字将职责委托给调用方方法(即它可以是另一个方法或jvm),然后调用方方法负责处理该异常。
范例2:
class ThrowsExample2 { public static void main(String[] args) throws InterruptedException{ Thread.sleep(1000); } }
throws关键字仅适用于检查的异常,否则我们将得到编译时错误(即,未报告的异常)。
对未经检查的异常使用throws关键字是没有意义的,如果需要,可以使用它,但不会产生编译时错误(对未经检查的异常没有影响)。
throws关键字不能防止程序异常终止。