Intellij一直说普通的“ throw”语句中有错误

时间:2019-02-24 10:46:08

标签: java

这是一个超级简单的Java代码

public class Main {


    public static void throwExample() {
        throw new Exception(); // IntelliJ says that something's wrong here.
    }

    public static void main(String[] args) throws FileNotFoundException {

        FileOutputStream fos = new FileOutputStream("aa.txt");
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        for(int i = 0; i < 10 ; i++) {
            baos.write((byte) i);
        }

        System.out.println(Arrays.toString(baos.toByteArray()));
    }
}

在我评论的第三行中,IntelliJ说这里有问题。所以我随机更改了代码,当我做下面的事情时,

public static void throwExample() // throws Exception

一切正常。

但是我看到很多例子 不带“ throws”的“ throw”关键字,例如

class Exception2{
   static int sum(int num1, int num2){
      if (num1 == 0)
         throw new ArithmeticException("First parameter is not valid");
      else
         System.out.println("Both parameters are correct!!");
      return num1+num2;
   }
   public static void main(String args[]){
      int res=sum(0,12);
      System.out.println(res);
      System.out.println("Continue Next statements");
   }
}

我的代码有什么问题?

2 个答案:

答案 0 :(得分:3)

  

但是我看到很多使用'throw'关键字但没有'throws'的示例   一起

在Java中,有两种主要的例外类别

  1. 已检查的异常
  2. 未经检查的异常

如果引发了检查的异常,则需要通过用try catch块包围可能引发检查的异常的代码段或在方法签名中添加throws关键字来捕获它。

另一方面,如果您的代码引发未经检查的异常,则不必捕获它。因此,java编译器不会抱怨您在第二个代码示例中未在方法签名中添加throws关键字。

答案 1 :(得分:1)

Exception是一个CheckedException,它需要引发。所有异常都从RuntimeException继承,并且都是UncheckedException,不需要try / catch或throws。

更多:Java: checked vs unchecked exception explanation