java 的自定义异常 class
Custom exception class for java
我需要为 Java 程序编写自定义异常 class。例如,当试图从列表中删除一个现有产品时,应该抛出一个异常,语句为 "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;
现在您可以在调用函数中处理此异常。
您已经创建了对异常对象的引用,但尚未对其执行任何操作。您需要做的是 throw
异常。
正如您所知,在创建 ShoppingCart
对象并用 Product
对象填充它的地方,您可以调用 removeFromCart(...)
对象 cart
来执行所需的动作。您的调用代码的一个基本示例是:
ShoppingCart cart = new ShoppingCart();
Product apple = new Product();
cart.addToCart(apple);
cart.removeFromCart(apple);
在这里,我们创建对象并用它或在它上面做一些事情。在您的示例代码中,问题是您没有对您创建的对象执行任何操作,因此它立即超出范围并被标记为垃圾回收。
异常与其他对象略有不同,因为您不必创建引用对象即可使用它(与上面的 ShoppingCart
一样)。您要做的是 create Exception,但我们需要 throw 和 catch如下所示的异常将为我们隐式创建它:
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 'How to Throw Exceptions' tutorial 开始,您可以在其中了解有关异常和抛出过程的更多信息并捕获它们,以及相关联的 try
、catch
和 finally
块。
这是抛出异常的推荐实现:
public class ShoppingCart
{
public void removeFromCart(Product p) throws ProductException
{
if (!cart.contains(p))
{
throw new ProductException("Error..Product not found");
}
cart.remove(p);
}
}
我需要为 Java 程序编写自定义异常 class。例如,当试图从列表中删除一个现有产品时,应该抛出一个异常,语句为 "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;
现在您可以在调用函数中处理此异常。
您已经创建了对异常对象的引用,但尚未对其执行任何操作。您需要做的是 throw
异常。
正如您所知,在创建 ShoppingCart
对象并用 Product
对象填充它的地方,您可以调用 removeFromCart(...)
对象 cart
来执行所需的动作。您的调用代码的一个基本示例是:
ShoppingCart cart = new ShoppingCart();
Product apple = new Product();
cart.addToCart(apple);
cart.removeFromCart(apple);
在这里,我们创建对象并用它或在它上面做一些事情。在您的示例代码中,问题是您没有对您创建的对象执行任何操作,因此它立即超出范围并被标记为垃圾回收。
异常与其他对象略有不同,因为您不必创建引用对象即可使用它(与上面的 ShoppingCart
一样)。您要做的是 create Exception,但我们需要 throw 和 catch如下所示的异常将为我们隐式创建它:
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 'How to Throw Exceptions' tutorial 开始,您可以在其中了解有关异常和抛出过程的更多信息并捕获它们,以及相关联的 try
、catch
和 finally
块。
这是抛出异常的推荐实现:
public class ShoppingCart
{
public void removeFromCart(Product p) throws ProductException
{
if (!cart.contains(p))
{
throw new ProductException("Error..Product not found");
}
cart.remove(p);
}
}