为什么 throws 关键字无法处理字段声明中抛出的异常

Why throws keyword cannot handle the exception thrown in field declaration

在下面的代码中,写在匿名 class 实例中的 Thread.sleep(3000); 只能使用 try-catch 块来处理。为什么 throws InterruptedException 子句不允许传播异常?

public static void main(String[] args) throws InterruptedException {
    Runnable task = new Runnable() {
        public void run() {
            // below line explicitly need to be handled using try-catch. throws keyword does not work here
            Thread.sleep(3000);         
        }
    };
}

run() 方法缺少 throws InterruptedException 子句。 main() 有一个并不重要,run() 是在 main() 内部定义的 class 中定义的也不重要。它们是两种不同的方法。

但是,

run() 添加一个是不可能的,因为 Runnable 不允许 run() 具有 throws 子句。因此,唯一的解决方案是用 try/catch 块包裹 sleep