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