【问题标题】:Throws clause in main method在 main 方法中抛出子句
【发布时间】:2019-06-11 02:22:50
【问题描述】:

为什么我需要将 throws 子句放在 main 方法中来处理异常?它不应该只是应该处理异常的 try-catch 吗?对不起我的英语

public static void main(String[] args) throws IOException {
    createFileDude();
}

public static void createFileDude() throws IOException {
    File file = new File("C:\\Users\\User\\Desktop\\Test.txt");
    try {
        System.out.println("Create file>> " + file.createNewFile());
    } catch (IOException e) {
        e.printStackTrace();
        throw e;
    }
}

【问题讨论】:

  • 您在catch 块中重新抛出异常...
  • 一个更好的问题是为什么实际上你从一个catch块中调用throw e;?在这种情况下,它真的没有什么意义。
  • 这只是一个例子;-;
  • 不,这是您问题的症结所在,也是您问题的全部原因。摆脱那些废话,问题就消失了。通过抛出异常,您的 try/catch 并不能真正处理异常,而是将其卸载到下一个级别。
  • try 块实际上是在声明“我将处理这个异常”,然后 catch 中的 throw 通过声明“不,事实上,我不会处理它”来反驳这一点

标签: java exception


【解决方案1】:

异常意味着“当前方法”出现问题。现在,开发人员可以在当前方法的 catch 块中处理它,或者只是告诉调用方法有问题让他们处理。

这样,最终开发人员可以将错误级联回操作系统。因此,这就是将错误扔回调用方法或在某个时候不将其扔回。

在这种情况下,作为开发人员,您可以在两个地方决定是否将异常消息级联回操作系统,首先是在您编写的方法中。正如我看到你写的抛出异常,现在在 main 方法中,你作为开发人员再次有机会不将它抛出到操作系统(通过在其中包含 try-catch 但不要抛出 catch 块),或者抛出它到操作系统。

在您的示例中,您选择通过添加 throws 子句将其扔回操作系统。

从 Java 的角度来看,Java 希望您(开发人员)对任何给定(已检查)异常做出有意识的决定,因此您会看到编译错误,直到您通过不抛出来抑制异常,或者直到您真正把它从'main'方法扔回操作系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多