java的自定义异常类

时间:2018-01-02 16:27:19

标签: java custom-exceptions

我需要为Java程序编写一个自定义异常类。例如,在尝试从列表中删除现有产品时,应抛出一个异常,并带有一个声明" error"。我尝试过使用它,但我不知道它是否正确。

# A tibble: 12 x 3
      id   rel   dtr
   <int> <dbl> <dbl>
 1     1     2     2
 2     2     7     1
 3     3     4     3
 4     4     2     2
 5     5     4     3
 6     6     5     4
 7     7     7     0
 8     8     7     1
 9     9    10     3
10    10     8     2
11    11     7     1
12    12     7     1

这里有什么错误以及如何纠正错误?感谢。

3 个答案:

答案 0 :(得分:1)

您已经创建了对异常对象的引用,但是您没有对它做任何事情。您需要做的是throw例外。

您似乎知道,在哪里创建ShoppingCart对象并用Product个对象填充它,您可以在removeFromCart(...)个对象上调用cart来执行所需的操作行动。您的呼叫代码的基本示例是:

ShoppingCart cart = new ShoppingCart();
Product apple = new Product();

cart.addToCart(apple);
cart.removeFromCart(apple);

在这里,我们创建对象并使用它或。在您的示例代码中,问题是您没有使用您创建的对象执行任何操作,因此它会立即超出范围并标记为垃圾回收。

异常与其他对象略有不同,因为您不必创建引用对象来使用它(与上面的ShoppingCart一样)。您要做的是创建异常,但我们需要抛出捕获异常,如下所示,它将隐式创建它对我们来说:

public class ProductException extends RuntimeException 
{
    public ProductException(String message) 
    {
        super(message);
    }
}

public class ShoppingCart 
{
    public void removeFromCart(Product p) throws ProductException 
    { 
        int i = cart.indexOf(p);

        if (i >= 0) {
            cart.remove(p);
        } else {
            throw new ProductException("Error..Product not found");
        }
    }
}

我们刚刚提出的异常现在需要被调用removeFromCart(...)的范围。例如:

public static void main(String[] args) 
{
    ShoppingCart cart = new ShoppingCart();
    Product orange = new Product();

    cart.addToCart(orange);

    try {
        cart.removeFromCart(orange);
    } catch (ProductException ex) { 
        /* 
           Do something... For example, displaying useful information via methods such 
           as ex.getMessage() and ex.getStackTrace() to the user, or Logging the error. 
         */
    } catch (Exception ex) { 
        // Do something...
    }
} 

如果您仍然不确定或需要更多内容,我建议您从Oracle Docs页面上的Java 'How to Throw Exceptions' tutorial开始,在那里您可以了解有关异常以及抛出和捕获它们的过程的更多信息,以及关联的trycatchfinally阻止。

答案 1 :(得分:0)

您需要在else块中抛出异常:

Console.Title = "Your title here";

现在您可以在调用函数中处理此异常。

答案 2 :(得分:0)

这是建议抛出异常的实现:

public class ShoppingCart 
{
    public void removeFromCart(Product p) throws ProductException 
    { 
        if (!cart.contains(p)) 
        {
            throw new ProductException("Error..Product not found");
        } 

        cart.remove(p);

    }
}