例外简介-章 4

第4章:如何编写自己的异常?

现在,我们已经知道了如何使用提供的异常以及其中一些最常见的异常。 但是,试想一下,您想抛出一个异常,该异常与预定义的任何异常都不适合吗?

例:

您已经编写了自己的文字冒险记录(是的,它们是老式的,但是仍然存在),并且您想在命令有效但在这种情况下不能使用时抛出异常(例如,“看着门”天黑的时候)。

您可以在此处使用if语句,但在这种情况下,我们只选择使用Exceptions。

您现在想要的是

ActionNotPossibleNowException 。 您想告诉它,什么不能做以及为什么不能完成,它应该为您提供输出,其中涵盖了两者。

可以这样编码:


public class ActionNotPossibleNowException extends Exception {
    public ActionNotPossibleNowException(String action, String reason)
    {
        super("Could not " + action + " now. Reason: " + reason);
    }
} 
如您所见,它与任何其他超类关系都没有任何不同。 我们所需要知道的是, Exception有一个构造函数,该构造函数将String作为参数,而此String是错误消息。

所以,现在你可以有一个方法

您的角色类中的lookAt如下所示:

public class Character {
    private boolean lightIsOn = true; 
    ... 
    public void lookAt(String target) throws ActionNotPossibleNowException
    {
        if(!lightIsOn) throw new ActionNotPossibleNowException("look at " + target, "It is dark.");
        else
        {
            ...
        }
    }
} 
当然,您也可以扩展任何其他给定的Exception-如果您决定ActionNotPossibleNowException实际上是Input-Output-Exception(IOException),只需将代码更改为

public class ActionNotPossibleNowException extends IOException {
    public ActionNotPossibleNowException(String action, String reason)
    {
        super("Could not " + action + " now. Reason: " + reason);
    }
} 
现在可以捕获以下任何一行:

catch(ActionNotPossibleNowException anpne){...}
catch(IOException ioe){...}
catch(Exception e){...} 
通常,您不应该直接扩展Exception,而应该扩展更专门的Exception。 例如
class NoKeyPressedException extends IOException {
   // ... 
} 
class NoMouseButtonPressedException extends IOException {
   // ... 
} 
都会被抓住
catch(IOException ioe) {
   //...
} 
而且您仍然可以有第三个例外

class ThirdException extends Exception {
   //...
} 
不会被该捕获块捕获,可以单独处理。 您可以不同地解决此问题,但这是一种简单而充分的方法。 返回第3章继续第5章
附加的文件
文件类型:zip Chapter4.zip (715字节,136视图)

From: https://bytes.com/topic/java/insights/750358-introduction-exceptions-ch-4-a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值