【发布时间】:2015-04-24 19:01:07
【问题描述】:
我似乎对如何抛出异常以及何时使用它来创建您自己的异常有点困惑。
我有这段代码,想知道我是否以正确的方式进行此操作
方法如下:
public void setHireYear(int year) throws Exception {
try{
if (year <= CURRENT_YEAR && year >= CURRENT_YEAR - MAX_YEARS_WORKED) {
hireYear = year;
}
else{
throw new HireYearException(year);
}
}catch(HireYearException e){
e.toString();
}
}
这是异常类:
public class HireYearException extends Exception
{
private int hireYear;
/**
* Constructor for objects of class HireYearException
*/
public HireYearException(int hireYear)
{
this.hireYear = hireYear;
}
public String toString()
{
return "Hire year cannot exceed Current year, your hire year is - " + hireYear;
}
}
为什么抛出自定义异常比抛出预定义异常更好?
【问题讨论】:
-
你不应该在throwing方法中
catch你自己的异常,如果你捕捉到它意味着你可以在本地解决问题,所以不再需要异常,否则将异常传播到调用者并让其中一个调用方法处理异常。所以省略方法中的 try-catch 块。 -
为什么自定义异常不如预定义异常?
-
1./ 验证不应该通过捕获异常来检查,使用单独的验证逻辑。 GUI 和 Web 框架通常会在这方面为您提供帮助; 2./如果你期望有单独的验证逻辑,那么一个无效的参数选择就是程序员错误:use IllegalArgumentException