Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java的自定义异常类_Java_Custom Exceptions - Fatal编程技术网

java的自定义异常类

java的自定义异常类,java,custom-exceptions,Java,Custom Exceptions,我需要为Java程序编写一个自定义异常类。例如,当试图从列表中删除现有产品时,应该抛出一个异常,并声明“error”。我试过用这个,但不知道是否正确 public class ProductException extends RuntimeException { public ProductException(String message) { super(message); } } public class ShoppingCart {

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

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 
        {
            ProductException e = new ProductException("Error..Product not found");
        }
    }
}

这里的错误是什么?如何纠正?谢谢。

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

ProductException e=new ProductException("Error..Product not found");
throw e;  

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

您已经创建了对异常对象的引用,但尚未对其执行任何操作。您需要做的是抛出异常

正如您所知,在创建
ShoppingCart
对象并用
Product
对象填充它的地方,您可以对该
cart
对象调用
removeFromCart(…)
,以执行所需的操作。调用代码的一个基本示例是:

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文档页面上的Java开始,在这里您可以了解有关异常以及抛出和捕获异常的过程的更多信息,以及相关的
try
catch
,和
最后
块。

这是建议用于引发异常的实现:

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

        cart.remove(p);

    }
}

您似乎只是创建了一个异常,但并没有抛出它