java 静态块exception,静态代码块可以引发异常吗?

In a hypothetical situation I have a class like this:

import java.io.File;

import java.util.Scanner;

class X

{

static Scanner scanner;

static

{

scanner = new Scanner(new File("X.txt"));

}

}

When compiling, I get

unreported exeption java.io.FileNotFoundException; must be caught or declared to be thrown

To fix this, I can put scanner = new... line in a try/catch statement:

static

{

try

{

scanner = new Scanner(new File("X.txt"));

}

catch(Exception e)

{

e.printStackTrace();

}

}

However, is there any way I can do something like:

static throws java.io.FileNotFoundException

{

scanner = new Scanner(new File("X.txt"));

}

This is a hypothetical situation. Please don't say "well why would you want to do that?" or "Here's a better way to make a Scanner!"

解决方案

It is a compile-time error if a class variable initializer (§8.3.2) or static initializer (§8.7) of a named class or interface can throw a checked exception class.

For completeness, an unchecked exception is defined in JLS §11.1.1:

RuntimeException and all its subclasses are, collectively, the run-time exception classes.

The unchecked exception classes are the run-time exception classes and the error classes.

This is the only type of exception that can be thrown from a static initializer.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值