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;
 }
}