Java的throws关键字用于声明异常。它向程序员提供了可能发生异常的信息。
因此,最好为程序员提供异常处理代码,以便保持程序的正常流程。
异常处理主要用于处理已检查异常。如果出现任何未检查的异常,例如NullPointerException,则是程序员的错误,他在使用代码之前没有进行检查。
Java throws的语法
return_type method_name() throws exception_class_name{
//方法代码
}
哪些异常应该声明?
答:只有已检查的异常,因为:
-
未检查的异常:在我们的控制范围内,因此我们可以纠正我们的代码。
-
错误:超出我们的控制范围。例如,如果发生VirtualMachineError或StackOverflowError,我们无法做任何事情。
Java throws关键字的优点
现在可以传播(在调用堆栈中转发)已检查的异常。
它向方法的调用者提供关于异常的信息。
Java throws示例
让我们看一下Java throws子句的示例,该示例说明了可以使用throws关键字传播已检查的异常。
Testthrows1.java
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:使用try-catch块处理异常
如果我们处理了异Java throws关键字
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...");
}
}
输出:
exception handled
normal flow...
情况2:声明异常
-
如果我们声明了异常,且异常未发生,代码将正常执行。
-
如果我们声明了异常且异常发生,它将在运行时抛出,因为throws不处理异常。
让我们为这两种情况看一些示例。
A) 如果异常未发生
Testthrows3.java
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{//声明异常
M m=new M();
m.method();
System.out.println("normal flow...");
}
}
输出:
device operation performed
normal flow...
B) 如果异常发生
Testthrows4.java
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...");
}
}
输出: