【问题标题】:Correct way to handle method exception? [duplicate]处理方法异常的正确方法? [复制]
【发布时间】: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

标签: java exception methods


【解决方案1】:

特定的海关例外允许您为自己的 catch 语句分隔不同的错误类型。异常处理的常见构造是这样的:

try
{}
catch (Exception ex)
{}

无论类型如何,它都会捕获所有异常。但是,如果您有自定义异常,则可以为每种类型设置单独的处理程序:

try
{}
catch (CustomException1 ex1)
{
    //handle CustomException1 type errors here
}
catch (CustomException2 ex2)
{
    //handle CustomException2 type errors here
}
catch (Exception ex)
{
    //handle all other types of exceptions here
}

因此它为您提供(好处以及创建它的原因)

1.特定的异常允许您更好地控制异常处理

2.为开发人员提供一种类型安全的机制来检测错误情况。

3.将特定情况的数据添加到异常中 理想情况下,这些数据将帮助其他开发人员追踪错误的来源。

4.没有现有的异常充分描述了我的问题

Source

【讨论】:

  • 感谢这对我有很大帮助,你想什么时候抛出新的异常?与尝试捕获然后抛出新异常有什么不同
  • @DaveDiienno 这只是复制和粘贴的答案,所以请不要投票。 stackoverflow.com/a/417457/3973077
  • @DaveDiienno 那也编辑了看看
  • @pbabcdefp 哥们也提到了来源!
  • @AnkurAnand 你还没有包含最后 4 点的来源。无论如何,您可能应该链接到 cmets 中的其他答案,而不是仅仅将它们粘贴为您自己的答案。
猜你喜欢
  • 2013-08-31
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多