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