为什么不能使用throws Exception?

Ruc*_*era 0 java exception-handling

请考虑以下声明

BufferedReader br=new BufferedReader(new FileReader("D:\\test.txt"));
Run Code Online (Sandbox Code Playgroud)

通常我们必须throws Exception或我们必须使用try-catch来处理Exception.

但是如果我想在静态块中使用它,如下所示.唯一能做的就是用try-catchblock来处理Exception.但是不能throws在这里使用?这里java没有提供的原因是什么throws

  static {
    try {
        BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt"));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
  }
Run Code Online (Sandbox Code Playgroud)

我也加上这个.块不是静态块类似规则的情况适用于此处.

 {
    try {
        BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt"));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

我们通常可以通过以下方法进行此操作

    public static void main(String[] args) throws FileNotFoundException {
    BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt"));
     }
Run Code Online (Sandbox Code Playgroud)

Ren*_*sen 6

它是在初始化类时运行的静态块.因为它是一个经过检查的异常,你不能抛出它,因为无处可去.
抛出一个未经检查的异常是可能的,但它会使程序崩溃,因为它们都无法在任何地方被捕获.

相反,您可以将代码放入

public static void init() throws FileNotFoundException
{
   BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt"));
}
Run Code Online (Sandbox Code Playgroud)

然后在程序启动时调用一次.

编辑:删除static关键字不会更改编译结果中的任何内容.它只是允许它丢失的语法.