Java异常处理中throw和throws区别
时间:2020-01-09 10:34:57 来源:igfitidea点击:
在Java中,五个关键字用于异常处理,即– try,catch,finally,throw和throws。在这五个关键字中,throw和throws关键字听起来非常相似,引起混乱,因此提出了Java异常处理中throw和throws之间有什么区别的问题。
Java中的Throw vs Throws
1throws子句用于在方法签名中声明一个异常,其中在代码中将as throw与实际抛出异常一起使用。
使用throws的方法签名中的异常声明
private void readFile() throws IOException { .... .... }
使用throw关键字引发异常
try{ if(args.length != 2){ throw new IllegalArgumentException("Two parameters should be passed"); } }
2使用throws子句,可以将多个异常声明为逗号分隔的列表。在这里,throw只能抛出一个异常实例。
使用throws子句声明多个异常
private void readFile() throws FileNotFoundException, IOException, ArithmeticException { .... .... }
3使用throws子句,可以声明方法代码可能引发的所有异常。我们实际上并没有抛出异常,只是声明了它们,以便调用者方法可以为声明的异常提供异常处理。
使用throw,我们实际上会抛出一个异常,该异常寻找具有匹配异常类型的最近的catch块。
4使用throws,在声明异常时,可以使用异常类本身的名称。
使用throw关键字,我们可以使用Throwable类或者其任何子类的实例,而无需使用异常类本身。
有掷
private void readFile() throws IOException
有掷
catch(IOException exp){ // throwing object of IOException class throw exp; }
或者我们创建一个异常类对象并将其抛出
throw new IOException();
类名(IOException)本身由throws子句给出。
5throw子句有一个限制,它必须与方法签名一起使用,因为throw语句必须是代码的一部分,并且它可能位于方法内部的任何位置,throw语句也可以在静态块中使用。
在静态块中使用throw
static { try{ ... ... }catch(Exception exp){ System.out.println("Initialization error " + exp.getMessage()); throw exp; } }