Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么必须使用;抛出IOException“;_Java_Ioexception - Fatal编程技术网

Java 为什么必须使用;抛出IOException“;

Java 为什么必须使用;抛出IOException“;,java,ioexception,Java,Ioexception,为什么在处理外部文件操作时,如果文件位于本地文件系统中,则必须在main方法中使用“throws IOException”。AFAIK,这不是必须的 您要么处理异常,要么不处理 如果您确实处理了异常,那么您需要放置一个try{…}catch(IOException e){…},但是如果您不处理它,只需在当前方法中声明抛出IOException。使用抛出IOException完全不是强制性的。如果您调用了一个可以抛出异常的方法,你被要求 抓住它,或者 声明你要重新播放它 第二个问题是你在做什么。另

为什么在处理外部文件操作时,如果文件位于本地文件系统中,则必须在main方法中使用“throws IOException”。

AFAIK,这不是必须的

您要么处理异常,要么不处理


如果您确实处理了异常,那么您需要放置一个
try{…}catch(IOException e){…}
,但是如果您不处理它,只需在当前方法中声明
抛出IOException

使用
抛出IOException完全不是强制性的。
如果您调用了一个可以抛出异常的方法,你被要求

  • 抓住它,或者
  • 声明你要重新播放它
  • 第二个问题是你在做什么。另一种方法——通常是首选技术——是自己捕获并处理异常:

    public static void main(String[] argv) {
        try {
            FileReader f = new FileReader("foo.txt");
            // ... more
        } catch (IOException ioe) {
            System.out.println("Trouble reading from the file: " + ioe.getMessage());
        } 
    }
    

    抛出IOException完全不是强制性的。。。。。 但是抛出IOException或fileNotFoundException并捕获它是一种好习惯,这样如果找不到文件,程序就不会崩溃并向您发送错误消息

    您需要使用Try-and-catch。。。。 下面是一个可能有用的代码片段

    Scanner fileScanner = null;
            try
            {
                fileScanner = new Scanner(new File("YOUR FILE PATH"));
                while(fileScanner .hasNextLine())
                {
                    String eachLine= scanner.nextLine();
                    String[] wordsFromFile = eachLine.split("\\W");
                }
            }
            catch(FileNotFoundException e)
            {
                System.err.println("Cannot find the file");
            }
            finally
            {
                if(scanner!= null)
                    scanner.close();
            }
    

    将抛出IOException添加到主函数中可能不是强制性的,但必须对异常执行某些操作。当您执行文件io、网络io或其他(?)io时,可能会出现问题。文件可能不存在,它可能位于磁盘的坏扇区上,网络可能中途崩溃(如果磁盘不是本地磁盘,这可能会影响网络或文件io)

    您需要对IOException做些什么的原因是它是一个已检查的异常。如果调用引发选中异常的构造函数或函数,则需要通过捕获它并采取适当的操作来处理它。或者你需要告诉编译器你知道这个异常,但是你不打算对它做任何事情,在这种情况下你必须在你的函数定义中声明
    抛出IOException

    还有另一种类型的异常,未经检查的异常(有时称为运行时异常,因为它们都扩展了RuntimeException)。未检查的异常被认为是潜在的运行时问题。e、 NullPointerException(NPE),由运行时条件引起的NPE的一个例子是,当您期望返回一个对象的某个对象返回NULL,然后您尝试调用该对象的方法时。至少这是理论

    所以你可能会想,好吧,运行时异常是针对意料之外的运行时问题,那么为什么IOException不是运行时异常呢!这不像是我计划的那样,损坏的磁盘会失灵,或者是斯克内克塔迪的反铲操作员夺走了半个海岸。我也很想知道!有人给我一个哈利路亚,哦,我听到了

    我在Java中做了大量与IO相关的工作,键入
    抛出IOException
    有点像我刚刚学会的这个眼中钉,因为一般来说,尝试在低级别处理IOException是一个坏主意,因为低级别代码根本不知道您要做的事情的上下文是什么,它应该让这些异常冒泡到代码中,在您试图完成的事情上有上下文

    哦,顺便说一句,我提到我想知道为什么IOException不是运行时异常,而NPE是?是的,这是一种运行时条件,但IO(磁盘、网络等)的可靠性比您想象的要低得多。如果您确信磁盘是可靠的,请阅读Sun发明ZFS的一些原因。如果你认为网络是可靠的,试着确保你的营销内容通过糟糕的3d聚会网络可靠地下载到15000个糟糕的基于Windows的信息亭,并确保客户从未看到因网络问题而损坏的垃圾图像。(你能说sha-1哈希和儿童吗?我就知道你能)

    我要带着这个去某个地方;我保证

    我认为IOException是一个检查过的异常的原因是IO不可靠(看看fallacy#1)。一般来说,您应该能够从代码中去除NPE bug,但IO是另一个野兽,它不可靠,我认为他们的目的是迫使您考虑它。我有没有提到这本书的作者之一是詹姆斯·戈斯林。詹姆斯·戈斯林,也就是爪哇之父?是的,至少这是我的理论。不是那样就是一个巨大的愚蠢错误。在早期的Java库中有很多这样的内容

    关于检查异常的有用性一直有很多争论,随着时间的推移,我同意一些人的看法,他们说这些异常不值得付出努力,如果有很多令人讨厌的、毫无意义的检查异常被声明,我会将它们包装起来,并重新抛出一个适当的运行时异常(向我的朋友问好!)尽管如此,我不会惹麻烦;明智的做法是忍受痛苦

    哦,简单来说,有一件事代码适合公共静态void main(String[])抛出IOException函数吗?正确的答案可能是让异常冒泡出来,让运行时报告给试图运行代码的可怜人


    谢谢,晚安。

    这不是强制性的,但至少你需要这样做 要么处理异常,要么不处理
    如果您确实处理了异常,那么您需要放置一个
    try{…}catch(IOException e){…}
    ,但是如果您不处理它,只需在当前方法中声明
    抛出IOException

    谁说它是强制的?如果必要,您也可以捕获它。它不是“强制的”。您可以捕获它,您可以“发布”你不会抓住它(因此你会把它传下去)。你唯一不能做的就是默默地忽略它。