- class FuShuException extends Exception
- {
- private int value;
- FuShuException()
- {
- super();
- }
- FuShuException(String msg,int value)//msg= "出现了除数是负数的情况--- by fushu" value=b
- {
- super(msg);
- this.value = value;//相当于this.value=b
- }
- public int getValue()
- {
- return value;
- }
- }
- class Demo
- {
- int div(int a ,int b)throws FuShuException
- {
- if (b<0)
- throw new FuShuException("出现了除数是负数的情况--- by fushu",b);//手动通过throw关键字抛出一个自定义异常对象
- return a/b;
- }
- }
- class ExceptionDemo3
- {
- public static void main(String[] args)
- {
- Demo d = new Demo();
- try
- {
- int x = d.div(4,-1);//new FuShuException("出现了除数是负数的情况--- by fushu",b)
- System.out.println("x="+x);
- }
- catch (FuShuException e /*new FuShuException */)//相当于FuShuException e = new FuShuException("出现了除数是负数的情况--- by fushu",b)
- {
- System.out.println(e.toString());
- System.out.println("被除的负数是:"+e.getValue());
- }
- System.out.println("over");
- }
- }
b在程序中走的流程是这样的,当执行到第26行,判断b<0为真时,就创建了一个FuShuException 对象,所以用new FuShuException ,并返回到调用这个方法的地方第39行(红色部分)。这行代码是在try{}里,所以这个错误对象就被检测到,并传给了catch(){},catch发现与自己要捕获的错误类型相同(蓝色部分)就它起个名字叫e,相当于 FuShuException e= new FuShuException("出现了除数是负数的情况--- by fushu",b)。FuShuException这个类就是你自己定义的异常类在第一行,它在构造时就需要两个参数一个字符串,一个就是int值。所以蓝色部分就把,b作为第二个参数传给了int value(第九行绿色部分),然后赋给了this.value(12行紫色部分)。创建了这个类的对象就可以用这个类里面定义的方法了,所以当执行到第45行,e.getValue()时会调用第一行那个异常类的getValue()方法(第14行)返回b到第45行的e.getValue(),这样b就被打印了。
|