有许多技术答案是JLS 第 1.2 节、检查的异常等,它们解释了它的使用。
但是你的问题
我什么时候应该宣布抛出异常,什么时候不应该抛出它而不声明它?
如果您的代码正在生成一些显式异常并抛出它,那么您应该始终添加throws 子句,并且您应该通过在将为您生成文档标签的函数上方编写 /** 来生成文档。如果在调用此函数之前未初始化某些无效参数或某些值,这将有助于使用您的库或函数的所有其他用户,该函数或构造函数必然会引发异常。
例如,
/**
*
* @param filePath File path for the file which is to be read
* @throws FileNotFoundException In case there exists no file at specified location
* @throws IllegalArgumentException In case when supplied string is null or whitespace
*/
public static void ReadFile(String filePath) throws FileNotFoundException, IllegalArgumentException
{
if(filePath == null || filePath == "")
throw new IllegalArgumentException(" Invalid arguments are supplied ");
File fil = new File(filePath);
if(!fil.exists()|| fil.isDirectory())
throw new FileNotFoundException(" No file exist at specified location " + filePath);
//..... Rest of code to read file and perform necessay operation
}
此外,这些文档标记和抛出使程序员的生活更轻松,他们将重用您的代码,并提前知道如果使用错误的参数调用函数或指定位置的文件不可用,将抛出 IllegalArgumentException、FileNotFoundException。
因此,如果您希望您的代码和函数是不言自明的,并提供所有必要的情况,则会引发哪些异常,然后添加以下子句,否则它是您的选择。
请记住,如果您自己在 30 天后正在使用(我相信您将在不久的将来重新使用它)这些功能,那么它将更有帮助,并且您将通过这些条款确切地知道我在该功能中做了什么.