创建自定义异常类

创建自定义的异常类需要继承自Exception类,并提供含有一个String类型形参的构造方法,该形参就是一场的描述信息,可以通过getMessage()方法获得。例如:

public class NewException extends Exception{
    public NewException(String s){//这个s就是自定义的精髓所在,想传啥传啥
            super(s);
    }
}

try catch在main里头用哈,具体的方法里头还是if 判断之后throw new 一个异常。
(是不是凡是涉及异常使用的类都必须Add throws Declaration?)

自定义异常类代码如下:

public class DangerException extends Exception{
    String s;
    /*该异常类有构造方法,该构造方法使用super调用父类构造方法,
     *使用字符串:“属于危险品!”,对父类变量message进行初始化。
     */
    DangerException(String s){
        super("属于危险品!");
        //message=s; Error:message cannot be resolved to a variable
        //this.message=s; Error:message cannot be resolved or is not a field
        //那如何对父类变量message进行初始化呢?
        //额,是不是:super("属于危险品!")就已经完成了对message的初始化?
        this.s=s;
    }

    public String toString(){
        return s+','+this.getMessage();
    }
}

其他代码如下:

public class Goods {
    private String name;
    private boolean isDanger;

    Goods(String name,boolean isDanger){
        this.name=name;
        this.isDanger=isDanger;
    }

    public String getName(){
        return name;
    }

    public void setName(String s){
        name = s;       
    }

    public boolean getIsDanger(){
        return isDanger;
    }

    public void setIsDanger(boolean b){
        isDanger = b;
    }
}
public class Machine {

    public void checkBag(Goods goods) throws DangerException{//不能忘记加
        //throws DangerException,否则下面的throw new 会报错!
        if(goods.getIsDanger()){
            throw new DangerException(goods.getName());         
            //System.out.println(goods.getName()+",被禁止!");// Error:Unreachable code
        }
        else
        {
            System.out.println(goods.getName()+",检查通过");
        }
    }
}
public class Check {
public static void main(String[] args) throws DangerException  {
    String[] name ={"苹果","炸药","西服","硫酸","手表","硫磺"};//商品名称         
    Goods[] goods = new Goods[name.length]; //检查6件物品     
    //创建商品对象
    goods[0]=new Goods(name[0],false);
    goods[1]=new Goods(name[1],true);
    goods[2]=new Goods(name[2],false);
    goods[3]=new Goods(name[3],true);
    goods[4]=new Goods(name[4],false);
    goods[5]=new Goods(name[5],true);
    //检查商品
    Machine m=new Machine();
    for(int i=0;i<6;i++){
        try{
            m.checkBag(goods[i]);
            //System.out.println();
        }
        catch(DangerException e){
            System.out.println(e);
            System.out.println(goods[i].getName()+",被禁止!");
        }
        finally{
            System.out.println();
        }
    }
}
}

这里写图片描述

经过复习才搞明白一点异常的机制:程序进入try,再进入public void checkBag(Goods goods)方法;如果在public void checkBag(Goods goods)方法中遇到异常,异常后面的代码不会执行了,程序将跳出public void checkBag(Goods goods)方法,来到catch,执行catch中的内容,这就是异常的机制了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值