我需要为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
这里有什么错误以及如何纠正错误?感谢。
答案 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开始,在那里您可以了解有关异常以及抛出和捕获它们的过程的更多信息,以及关联的try
,catch
和finally
阻止。
答案 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);
}
}