java - try/catch 不适用于静态成员可抛出类?

标签 java

正如标题所示,我在抛出静态成员类时遇到了一些问题。但我不确定这是否是问题所在,并且编译器给了我关于我应该做什么的混合信号!我的程序的类和函数都在一个文件中。

这是我的 Throwables 之一的定义(其他的基本相同):

private static class ParenthesisException extends Throwable
{
    public ParenthesisException(){}
    public String strErrMsg()
    {
        return "ERROR: Every '(' needs a matching ')'";
    }
}

我将其放入一个成员函数中,该函数由 try/catch 语句中的 main 调用。我将另一个 Throwable 类放入一个由 try/catch 语句中的 main 调用的函数中。这是其中的一小部分:

try
{
    parseFormula(cin.nextLine());
}
catch(ParenthesisException e)
{
    System.out.println(e.strErrMsg());
}
catch(OperatorException e)
{
    System.out.println(e.strErrMsg());
}

parseFormula 是抛出 ParenthesisException 的静态成员函数。

编译器说:

Unreachable catch block for jcalc.ParenthesisException. This exception is never thrown from the try statement body

但是我确实把它扔在这里,在parseFormula中:

if(n_lpar != n_rpar)
    throw new ParenthesisException();

奇怪的是,当我删除 try/catch 时,它告诉我异常没有被捕获。这让我很困惑,因为之前它说 ParenthesisException 从未被抛出,现在它说它从未被捕获,但抛出。

我想知道这是否与它们都是静态成员(类和函数)的方式有关,以及我如何解决这个问题。

最佳答案

你的错误是你的ParenthesisException直接扩展了Throwable。

你不应该这样做。如果你希望你的异常被检查异常(编译器强制你捕获它),则扩展 Excption,如果你不希望编译器强制你,则扩展 RuntimeException;如果你认为这是致命的,则扩展 Error。

关于java - try/catch 不适用于静态成员可抛出类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847475/

相关文章:

java - HashSet 和 LinkedHashSet

Tomcat 7 无法开始给出异常 : java. security.NoSuchAlgorithmException: SHA1PRNG SecureRandom 不可用

java - 如何从 svn 进行结帐,在 java 中将路径作为字符串

java - 为什么我的 BufferedImage 从 ImageIO.read() 接收到空值

java - 我在编译 Java 代码时遇到问题。我推测这是因为第二种方法 "method1"中存在转换/升级错误

java - 无法通过蓝牙写入十六进制字节

java - Android 拆分字符串

java - 如何使用 Spring Batch 和 Hibernate 从 @JoinColumn 获取值

java - 如何检查特定的 Java 程序是否正在使用 Windows CMD 运行?

java - 在 JAVA 中列出远程计算机上目录内特定类型的所有文件