为什么以下代码声明可以抛出异常? 虽然这是方法应该根据javadocs看起来的方式,但删除"抛出异常"部分不会导致编译错误。文档没有提到为什么有必要。
public class GUI extends Application {
public static void main(String... args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
BorderPane bp = new BorderPane();
Scene scene = new Scene(bp, 640, 480);
stage.setScene(scene);
stage.show();
}
}
答案 0 :(得分:4)
您发布的示例代码中没有必要。正如您所观察到的,Application
类中声明的抽象方法声明它可能会抛出异常。这意味着
Application.start(...)
的人都必须准备好捕捉异常第二点变得很重要,因为该方法由JavaFX框架调用,通常在启动时或通过调用launch(...)
。因此,您可以确保JavaFX框架必须处理从start(...)
方法实现中抛出的任何异常。
在您发布的代码中,没有任何内容可以抛出异常,因此您可以轻松删除throws
子句。但是,例如,如果您使用FXML,则会很有用:
@Override
public void start(Stage primaryStage) throws Exception {
// FXMLLoader.load(...) throws an IOException, no need to handle it here
// we just let it propagate up and the JavaFX framework will handle it
Parent root = FXMLLoader.load(...);
// ...
}
如果您在throws Exception
方法中没有start
(或至少throws IOException
),则无法编译;反过来,如果Application
中的抽象方法未声明它可能会抛出异常,则无法编译。