Java中的throw和throws之间的区别
内容
throw和throws是异常处理中使用的关键字。的 扔 关键字用于将程序员创建的异常实例手动移交给JVM。的 抛出 关键字,用于将处理方法中发生的异常的责任移交给调用方方法。 throw和throws之间的基本区别是throw关键字使用异常对象,而throws关键字使用异常类的名称。
- 比较表
- 定义
- 关键差异
- 结论
比较表
比较基础 | 扔 | 抛出 |
---|---|---|
基本的 | throw关键字将我们创建的异常对象手动移交给JVM。 | throws关键字用于将异常处理的责任委托给方法的调用者。 |
句法 | 抛出Throwable实例; | return_type method_name(parameter-list)抛出ExceptionClass_list { //方法主体 } |
其次是 | throw关键字后跟异常对象。 | throws关键字后面是该方法中可能发生的异常类的列表。 |
抛出的异常数 | throw关键字可以引发一个异常实例。 | throws关键字可以声明多个用逗号分隔的异常类。 |
投掷的定义
关键字“扔”用于将我们创建的异常实例手动移交给JVM(Java虚拟机)。如果不使用“ throw”引发异常实例而发生异常,则运行时系统会在内部将异常实例引发给JVM,并且程序异常终止。 throw关键字的一般形式为:
抛出Throwable_instance;
在Throwable_instance上方必须是Throwable类的对象。不能使用throw关键字抛出诸如int,float或char之类的原始类型以及不可抛出的类实例。
让我们以一个例子来理解关键字throw。
类Test {公共静态void main(String args){抛出新的ArithmeticException(“ /零”); }}
在上面的代码中,关键字throw引发Exception类“ ArithmeticException”的实例。如果未使用throw关键字,则main()方法将在内部创建一个异常对象,该异常对象将移交给JVM。
关于关键字throw要记住的要点:
- 它将异常对象手动切换到JVM。
- 最好用于用户定义的异常或定制的异常。
- 如果未将内存分配给throw关键字抛出的异常对象,则会发生运行时异常NullPointerException。
- throw关键字在程序出现后立即停止执行。我们不能在throw语句之后直接写任何语句。如果我们在throw语句后直接写任何台词,则编译器将在编译过程中显示错误且无法访问的语句。
- 使用Throw关键字只能抛出Throwable类的对象。如果抛出的对象不是Throwable类的对象,那么我们将得到一个编译时错误“发现不兼容的类型。 。必需的java.lang.Throwable”
注意:
在C ++,JAVA,C#中使用throw关键字来手动引发异常。
抛出的定义
“抛出关键字用于将处理方法中发生的异常的职责委托给其调用方方法。调用方方法负责处理异常,它可以是任何其他方法或JVM。它声明方法中可能发生的异常类的列表。
throws关键字的使用使编译器确信该方法中发生的异常将由调用方方法处理,因此不会发生编译错误。但是,调用方方法必须处理异常或将处理异常的责任委托给其层次结构方法。当运行时异常发生时,即使使用了throws关键字,也不能防止程序异常终止。如果调用者方法是main(),则默认情况下JVM处理该异常。
throws关键字的一般形式为:
return_type method_name(parameter-list)抛出exceptionClass_list {//方法主体}
我们可以看到throws关键字出现在方法签名之后,并且可以包含方法中可能发生的异常类的列表。在关键字引发之后编写的异常类的列表由逗号分隔。
让我们举一个例子来理解throws关键字。
calss Test {public static void main(String args)throws InterruptedException {thread sleep(10000); }}
在上面的代码中,使用sleep()方法使主线程休眠了一段时间。现在,当主方法处于睡眠状态时,其他线程可能会中断主线程。但是,在main()方法签名后使用了throws关键字,因此该程序将易于编译。 throws关键字声明了检查的异常类InterruptedException。现在,如果有任何其他线程在运行时中断主线程,则throws关键字会将该异常移交给main()方法的调用者,即JVM。 JVM将异常终止程序。
有关throws关键字要记住的要点:
- throws关键字仅用于声明已检查的异常类。对未经检查的异常使用throws关键字没有任何影响。
- 如果该方法不想自己处理该异常,则使用throws关键字将该异常委托给该类的调用者方法。
- 它的用法仅允许顺利编译程序。
- 如果在运行时发生异常,则即使使用throws关键字后,程序也会异常终止。
- 如果运行时发生异常,建议使用try / catch块正常终止程序。
注意:
关键字throws仅在Java中使用。 C ++和C#不使用throws关键字。
- 关键字throw手动将异常处理的职责移交给JVM,而关键字throw则将异常处理的职责移交给发生了异常的代码的调用方方法。
- throw关键字之后是异常对象,该异常对象已移交给JVM。另一方面,throws关键字后面是方法中可能发生的异常类。
- throw关键字可以一次抛出一个异常对象,而throws关键字可以一次声明多个由逗号分隔的异常类。
结论:
throw关键字最适合用于自定义异常。 try / catch块最适合处理与throws关键字相比的异常。