Java检查异常

Java检查异常,java,exception,checked,throws,Java,Exception,Checked,Throws,我试图理解Java中的检查异常,并进行以下查询 是否正确:如果方法有可能引发任何类型的已检查异常,则该异常必须是 使用抛出关键字声明,或 通过各自的方法捕获 如果上面所说的是正确的,这是否意味着我需要了解Java中内置的每个检查异常,以便知道我的方法是否有可能抛出该异常?还是我应该尝试编译代码,然后根据编译时错误修改代码 如果上面所说的是正确的,这是否意味着我需要理解Java[…]中内置的每个检查异常 是的,您的语句是正确的,但是没有人希望您在编程时知道所有潜在的检查异常。如果你手头有一个编译器

我试图理解Java中的检查异常,并进行以下查询

是否正确:如果方法有可能引发任何类型的已检查异常,则该异常必须是

  • 使用
    抛出
    关键字声明,或
  • 通过各自的方法捕获
  • 如果上面所说的是正确的,这是否意味着我需要了解Java中内置的每个检查异常,以便知道我的方法是否有可能抛出该异常?还是我应该尝试编译代码,然后根据编译时错误修改代码

    如果上面所说的是正确的,这是否意味着我需要理解Java[…]中内置的每个检查异常

    是的,您的语句是正确的,但是没有人希望您在编程时知道所有潜在的检查异常。如果你手头有一个编译器,或者更好,一个IDE,你就不必这么做

    您可以按照问题中的建议在编译器输出和代码之间来回切换,或者安装一个IDE(如Eclipse),如果您违反规则,它会直接向您发出通知:

    这是否意味着我需要了解Java中内置的每个检查异常

    我假设您正在使用某个IDE(例如Eclipse)——如果没有,您应该尽快获得一个IDE

    然后,IDE几乎连续地编译代码,因此当出现问题时,您将在其附近看到一条红色下划线,并显示一个工具提示气泡,告诉您出了什么问题-例如“丢失抛出”

    因此,你的第二个假设基本上是正确的,它只是发生在幕后:

    还是我应该尝试编译代码,然后根据编译时错误修改代码

    因此,您不需要了解所有异常

    此外,所有选中的异常都会扩展
    异常
    ,因此如果您有权访问源代码,则可以检查它们基于什么。非检查异常扩展
    RuntimeException


    经验法则:如果是带有I/O的内容,通常会进行检查。这是您将遇到的最常见的异常类型。

    每当您使用一个方法(无论是您自己的还是内置的)时,如果您密切跟踪它的方法签名,如果该方法抛出一些异常,您需要在代码中显式抛出/处理它

    通过这种方式,您将不需要记住所有异常,并且您将知道在何处处理哪些异常

    为了让生活变得简单,请使用eclipse之类的IDE

    希望这有帮助

    祝你好运

    如果以上是正确的

    它是

    […]这是否意味着我需要了解Java中内置的每个已检查异常,以便知道我的方法是否有可能生成该异常?还是我应该尝试编译代码,然后根据编译时错误修改代码

    使用IDE!你不需要密切了解他们所有人

    但是,您要检查的是层次结构(即,检查javadoc!这应该是巴甫洛夫反射);由于异常是类,它们彼此继承,例如,
    FileSystemException
    是java.nio.file的一个portmanteau异常,表示与文件系统相关的问题,它继承了
    IOException
    。如果您想特别对待它,请在IOException之前捕获它

    一般来说,首先捕获更具体的异常

    另外,不要捕获异常。从未。问题是
    RuntimeException
    是未检查异常的基本异常,它继承了
    exception
    ,这意味着如果捕获
    exception
    ,则捕获所有未检查的异常。要重新显示未选中的项目:

    try {
        something();
    } catch (RuntimeException unchecked) {
        throw unchecked;
    } catch (Exception e) {
        // deal with e
    }
    

    是的,你需要知道每个异常。但是如果你知道该异常的超类,你就不需要知道它的子类。例如,FileReader抛出一个名为FileNotFoundException的异常,因为FileNotFoundException是IOException的子类,我们可以在抛出列表中指定IOException,并使上面的程序编译器无错误