什么时候应该定制异常?

时间:2014-10-14 07:05:48

标签: java

我想知道何时是定制例外的最佳时机?

代码

public void myMethod() throws MyCustomizedException {

   try{
      ...
   }catch(IOException e){
     logger.log(e);
   }
}

caller.myMethod();

7 个答案:

答案 0 :(得分:1)

答案真的取决于。自定义异常是特定于项目的。举个例子,考虑一下我正在研究一种仓储产品。

public void addProductToWarehouse() throws WareHouseCapacityExceedException{
 if(warehouse.isFilled()){
     throw new WareHouseCapacityExceedException("Some custom message");
  }
  // proceed, warehouse is free.
}

答案 1 :(得分:0)

为什么需要创建一个cusomized异常的最常见原因是你要构建自己的java库集,并且除了现有的那些之外,还有其他属性和方法要包含在新的Exception中异常。

答案 2 :(得分:0)

取决于您在哪里实施它。我几乎一直都会说!

如果出现问题,您可能希望为应用程序抛出不同类型的错误。 在这种情况下,您将实施自定义例外。

例如

在您的代码中,您正在验证用户输入数据,如果未输入有效数据,您将抛出InvalidInputException(仅作为示例)

你不能总是抛出java中预先定义的异常,因为那些是由某种原因定义的。 与NullPointerException类似,当您尝试取消引用null referance

时会抛出此内容

答案 3 :(得分:0)

在创建自定义异常之前,首先要始终查看标准库中包含的异常,如果其目的看起来与您的相同(或接近相同),则重复使用它们。

请参阅ExceptionRuntimeException的直接已知子类。一些Exception也有许多专门的子类,例如查看IllegalArgumentExceptionIllegalStateException的直接子类。

例如,如果您的方法采用的参数不能为null,请使用NullPointerException。如果参数具有有效范围且您不接受其他值,请使用IllegalArgumentException

如果标准库(或您使用的库中)没有现有的自定义Exception用于其目的,或者您要抛出的Exception应该与{您可以通过方法调用的代码和方法抛出{1}}。

答案 4 :(得分:0)

Creating Exception Classes

上的oracle java教程

有这个说:

  

如果您对以下任何问题的回答为是,您应该编写自己的异常类;否则,你可以使用别人的。

     
      
  • 您是否需要Java平台中未表示的异常类型?
  •   
  • 如果用户可以将您的例外与其他供应商撰写的类别所引发的异常区分开来,会对用户有所帮助吗?
  •   
  • 您的代码是否会抛出多个相关的异常?
  •   
  • 如果您使用其他人的例外情况,用户是否可以访问这些例外情况?一个类似的问题是,你的包裹是独立的还是独立的?
  •   

此外,我想补充一点,如果当前作用域没有足够的信息来有效处理异常,通常应抛出异常。抛出异常时,将其传递给堆栈以在不同的范围内处理。

答案 5 :(得分:0)

一个用例是您希望以通用方式处理多个异常。示例:假设您希望以一般方式SQLExceptionConnctionExceptionSomeOtherException(对于所有3个例外,在scren上向用户显示错误),然后将该异常包装在您的自定义异常中并让父母以一般方式处理它。对于必须通常处理的异常,这可以防止多个catch块`的代码混乱。

答案 6 :(得分:0)

我想说什么时候你想确切地知道出了什么问题。如果它是你自己的自定义异常,你知道没有其他可能的原因,而不是通用或已经存在的东西,这可能是由一个无关的问题抛出的。