Java抛出关键字(throw和throws)

Java throws关键字用于声明异常。它向程序员提供了可能发生异常的信息, 因此, 程序员最好提供异常处理代码, 以便可以维持正常的流程。
异常处理主要用于处理检查的异常。如果发生任何未检查的异常(例如NullPointerException), 则程序员会犯错, 他在使用代码之前没有执行检查。
Java throw的语法

return_type method_name() throws exception_class_name{ //method code }

应该声明哪个异常
Ans)仅检查异常, 因为:
  • 未经检查的异常:在你的控制之下, 请更正你的代码。
  • 错误:超出你的控制范围, 例如如果发生VirtualMachineError或StackOverflowError, 你将无法执行任何操作。
Java的优势抛出关键字
现在可以传播Checked Exception(在调用堆栈中转发)。
它向方法的调用者提供有关异常的信息。
Java抛出例子让我们看一下Java throws子句的示例, 该子句描述了可以通过throws关键字传播已检查的异常。
import java.io.IOException; class Testthrows1{ void m()throws IOException{ throw new IOException("device error"); //checked exception } void n()throws IOException{ m(); } void p(){ try{ n(); }catch(Exception e){System.out.println("exception handled"); } } public static void main(String args[]){ Testthrows1 obj=new Testthrows1(); obj.p(); System.out.println("normal flow..."); } }

立即测试
输出:
exception handled normal flow...

规则:如果要调用的方法声明了异常, 则必须捕获或声明该异常。
有两种情况:案例1:你捕获了异常, 即使用try / catch处理异常。情况2:你声明了异常, 即用方法指定throws。
案例1:你处理异常
  • 如果你处理了异常, 则无论程序中是否发生异常, 都可以很好地执行代码。
import java.io.*; class M{ void method()throws IOException{ throw new IOException("device error"); } } public class Testthrows2{ public static void main(String args[]){ try{ M m=new M(); m.method(); }catch(Exception e){System.out.println("exception handled"); }System.out.println("normal flow..."); } }

立即测试
Output:exception handled normal flow...

情况2:你声明异常
  • A)如果你声明了异常, 则如果不发生异常, 代码将被很好地执行。
  • B)如果在发生异常时声明异常, 则在运行时将引发异常, 因为throws无法处理该异常。
A)如果没有发生异常则编程
import java.io.*; class M{ void method()throws IOException{ System.out.println("device operation performed"); } } class Testthrows3{ public static void main(String args[])throws IOException{//declare exception M m=new M(); m.method(); System.out.println("normal flow..."); } }

立即测试
Output:device operation performed normal flow...

B)如果发生异常, 请编程
import java.io.*; class M{ void method()throws IOException{ throw new IOException("device error"); } } class Testthrows4{ public static void main(String args[])throws IOException{//declare exception M m=new M(); m.method(); System.out.println("normal flow..."); } }

立即测试
Output:Runtime Exception

掷与掷之间的区别
点击我了解详情
e)我们可以抛出异常吗?
【Java抛出关键字(throw和throws)】是的, 通过在catch块中抛出相同的异常。

    推荐阅读