首页 文章

IntelliJ - 对抛出异常的代码施加try \ catch [暂停]

提问于
浏览
1

在eclipse中,框架对任何抛出异常的代码强制执行try \ catch或throws语句 . 如果没有例外,你就无法继续 .

例如,如果你写:

File propertiesFile = new File(PROPS_FILE_PATH)

除非用 try/catch 包围它或将 throws FileNotFoundException 添加到方法签名,否则Eclipse不会构建项目 .

IntelliJ没有强加于此 .

IntelliJ中是否存在任何并行行为?任何插件?


伙计们,谢谢大家的建议 . 我主要关注的是要了解是否有一种方法可以实现“检测和警告异常”的相同行为,就像在Eclipse IDE中一样 .


锁定我的问题之后:

DZone所述:

在创建Exception类时,程序员必须指定一种必须捕获或可选地捕获的异常 . 如果声明Exception类以扩展Exception,如下所示,编译器将坚持要抛出的方法也应该在catch块中 . 编译器在调用抛出必须捕获的异常的方法时为程序员提供两种选择:1 . 在正在调用的代码中添加try / catch以捕获异常2.将异常重新传递给调用者

所以,你可以看到,eclipse编译器强制程序员以这种方式或另一种方式处理异常 . 这也是我在Intellij上搜索的内容 .


谢谢!

3 回答

  • 1

    除非......否则Eclipse不会构建项目

    首先:捕获异常是一件好事 . “正常”操作模式是:将生成的try / catch放在那里,使用“TODO:我们应该捕获,还是执行其他操作”,以及至少打印/转储异常 . 因此,当您开始测试代码时,您会看到异常 .

    除此之外:实际上eclipse是IDE(默认情况下)即使遇到错误也会继续编译 . 它甚至允许你在方法B不编译的某个类中运行方法A!

    另一方面,IntelliJ将在遇到第一个错误时_4736_全部编译活动 . 您实际上必须设置您的项目以使用"eclipse"编译器样式来进行eclipse "continue compile after errors"!

  • 2

    对于已检查的异常,IntelliJ的工作方式与Window相同:它需要您处理(捕获/抛出)它 .
    File propertiesFile = new File(PROPS_FILE_PATH) 不会抛出任何已检查的异常 . 看看constructor javadoc .

    尝试使用可能抛出已检查异常的语句:

    FileInputStream propertiesFile = new FileInputStream(PROPS_FILE_PATH);
    

    我主要关心的是要了解是否有办法实现“检测和警告异常”的相同行为,就像在Eclipse IDE中一样 .

    您可以在导致它的语句,项目视图(当前类将以红色加下划线)和问题视图中的IDE上找到编译错误 .
    IntelliJ提供的默认意图(在语句中输入alt)将在throw子句中添加异常或捕获异常 .
    在Eclipse中,您在相同位置找到编译错误,默认快速修复是相同的 .
    所以你不应该在IntelliJ上迷失方向 . 至少在这一点上 . 请注意,其他人可能是 . 我个人:)

    关于"alerting",IntelliJ默认的运行方式比Eclipse更严格:它快速失败 .
    GhostCat的答案很好地解决了这一点 . 你可能会感兴趣 .

  • 0

    在IntelliJ / Eclipse的任何地方进行异常处理:

    java.lang.Object
    |
    +--java.lang.Throwable
         |
         +--java.lang.Exception
         |     |
         |     +--java.lang.ClassNotFoundException
         |     |
         |     +--java.io.IOException
         |     |     |
         |     |     +--java.io.FileNotFoundException
    

    以下是其他一些Checked Exceptions: -

    *IOException
    *ClassNotFoundException
    *FileNotFoundException
    

    所以你需要在运行之前检查并处理bt try / catch本地或抛出到父级:

相关问题