1

我已经多次检查了这段代码,但我无法弄清楚为什么它会吐出关于 catch 语句的错误。我知道使用 Java 7 可以使用一个 catch 子句处理多个异常。

import java.io.*;
import java.util.*;

public class MultiCatch
{
    public static void main(String[] args)
    {
        int number;

        try
        {
            File file = new File("Numbers.txt");
            Scanner inputFile = new Scanner(file);

            while (inputFile.hasNext())
            {
                number = inputFile.nextInt();

                System.out.println(number);
            }

            inputFile.close();
        }

        catch(FileNotFoundException | InputMismatchException ex)
        {
            System.out.println("Error processing the file.");
            //System.out.println("Error processing the file." + ex.getMessage());
        }
    }
}

错误:

$ javac MultiCatch.java
MultiCatch.java:25: <identifier> expected
        catch(FileNotFoundException | InputMismatchException ex)
                                   ^
MultiCatch.java:25: '{' expected
        catch(FileNotFoundException | InputMismatchException ex)
                                     ^
MultiCatch.java:25: not a statement
        catch(FileNotFoundException | InputMismatchException ex)
                                                             ^
MultiCatch.java:25: ';' expected
        catch(FileNotFoundException | InputMismatchException ex)
                                                              ^
MultiCatch.java:31: reached end of file while parsing
}
 ^
5 errors

如果它有所作为,我在运行 Java 7 的 OSX 10.8 上。

4

3 回答 3

3

在 Java 6 下,您的代码出现此编译器错误:

C:\dev\src\misc\MultiCatch.java:25: <identifier> expected
        catch(FileNotFoundException | InputMismatchException ex)
                                   ^
C:\dev\src\misc\MultiCatch.java:25: '{' expected
        catch(FileNotFoundException | InputMismatchException ex)
                                     ^
C:\dev\src\misc\MultiCatch.java:25: not a statement
        catch(FileNotFoundException | InputMismatchException ex)
                                                             ^
C:\dev\src\misc\MultiCatch.java:25: ';' expected
        catch(FileNotFoundException | InputMismatchException ex)
                                                               ^
C:\dev\src\misc\MultiCatch.java:31: reached end of file while parsing
}

但是,在 Java 7 下,您的代码可以成功编译。

您必须使用 Java 6 或更低版本才能获得这些错误。

问题在于每个异常都必须有一个名称。在 Java 7 下,

catch(FileNotFoundException | InputMismatchException ex)

是正确的语法。

于 2013-05-07T22:53:52.163 回答
1

此代码没有错误,并且符合 Java 7。检查编译器的设置,您正在将代码编译为 Java 6。

于 2013-05-08T07:23:40.050 回答
0

根据您的 IDE,将 Java 兼容级别从 1.6 或 1.5 设置为 7。

  1. 对于 Eclipse,这也适用于 OSX:链接。我正在使用 Eclipse,指定哪个 JVM/JRE/JDK 将运行您的程序是一回事,但它可以在不同的 Java 版本中运行您的程序。
  2. 对于 NetBeans,请查看以下内容:链接链接、项目级别设置也可能是必要的。
  3. IntelliJ:将项目级别设置为 7:链接
于 2013-05-07T23:06:17.147 回答