在 C++ 中,我可以声明一个不能进一步抛出异常的函数,如下所示
int myfunction (int param) throw(); // no exceptions allowed
我可以在 Java 编程语言中有这样的声明吗?
不,任何方法总是可以抛出未经检查的异常(RuntimeException
和Error
)。
您只需要在方法声明中列出检查的异常(Exception
不派生自的子类)。RuntimeException
还有一个丑陋的旁注:虽然编译器确实检查没有抛出未声明的已检查异常,但您可以使用一些丑陋的技巧来解决这个问题(有时称为偷偷摸摸的 throw,Project Lombok明确支持它)。
不,不是那种意义上的。您可以声明一个函数不引发异常(只需不包含 throws 关键字),但您根本无法阻止函数引发任何异常。想象一下,您将在该函数中除以零 - 程序的行为将是未定义的。
有一种方法可以确保不会将异常抛出到上一层。只需将所有代码放在 try catch 语句中,这样即使方法中发生任何异常,它也会始终被捕获。
但是,请记住,它只会确保异常不会传播到上一个(调用)层。它肯定不会确保异常不会发生在方法体中