Java异常体系介绍及自定义异常

------------------------java.lang.Throwable

Throwable  : 可抛出的

       |--Error :错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正。

       |---Exception 异常,可以有针对性的处理方式。

两者的区别:

       error 属于编译时期的错误,根本不会编译通过,也就是不会生成.class文件。

       exception属于运行时错误,只有在调用的时候才会报错,比如空指针或数组下标越界等等。

命名规范;无论是错误还是异常,它们都有具体的子类体现每一个问题,它们的子类都有一个共性,就是都以父类名作为子类的后缀名。

可抛性:这个体系的类和对象都可以被throws和throw两个关键字所操作。

使用场景:在实际的开发中,发现该功能会出现一些问题,应该将问题在定义功能时标示出来,这样调用者就可以再使用这个功能的时候,预先给出一些处理方式。

                 如何标示呢?通过throws关键字完成,格式:throws 异常类名,异常类名....

               标示后,调用者就必须要处理,否则编译失败。

Throws与Throw的区别

      Throws:在方法上抛。用于抛出异常类,后面跟的是异常类的名,可以跟多个,用逗号隔开。throws用在函数上。

       Throw :在方法体中抛。用于抛出异常对象,后面跟的是异常对象;throw用在函数内。

处理方式有两种,捕捉和抛出

       try{

            //需要被检测的代码

        }catch(异常类 变量名){

         //异常处理代码

        }

          finally{

         //一定会执行的代码

        }

异常分类

编译时异常:只要是Exception及其子类都是编译时被检测的异常

运行时异常:子类RuntimeException .以及RuntimeException的子类是运行时异常,也就是这个异常是编译时不被检测的异常。

编译时被检测的异常和运行时异常的区别:

       编译时被检测的异常在函数内被抛出,函数必须要声明,否则编译失败。

       声明的原因:是需要调用者对该异常进行处理。

       运行时的异常如果在函数内 被抛出,在函数上不需要声明。

     不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用者处理,直接让程序停止,由调用者对代码进行修正。

定义异常处理时,什么时候时候定义try , 什么时候定义throws呢?

  功能内部如果 出现异常,如果内部可以处理,就用try;

  如果功能内部处理不了,就必须声明出来,让调用者处理。

自定义异常

将项目中的特有问题也进行封装,这个异常,称为自定义异常。


package com.inphase;
/**
 * 除数不为零异常
 * @author Administrator
 *
 */
public class DivisorNotZeroException extends Exception{

    public DivisorNotZeroException() {
        super();
    }

    public DivisorNotZeroException(String message) {
        super(message);
        
    }

}



package com.inphase;

/**
 * 定义除数不为负数的异常
 * @author Administrator
 *
 */
public class DivisorNotMinusException extends Exception {

    public DivisorNotMinusException() {
        super();
        
    }

    public DivisorNotMinusException(String message) {
        super(message);
        // TODO Auto-generated constructor stub
    }
    
}

package com.inphase;

import sun.org.mozilla.javascript.internal.ast.ThrowStatement;

/*
 * 除法方法类
 */
public class Divisor {
    
    public int dividor(int x , int y ) throws DivisorNotZeroException, DivisorNotMinusException{
        
        if (y==0) {
 
                throw new DivisorNotZeroException("您输入的是"+y+",规定除数不能为0!");//抛出异常   
        }
        
        if (y<0) {
            throw new DivisorNotMinusException("您输入的是"+y+",规定除数不能为负数!");   //抛出异常
        }
        return x/y;
    }

}


package com.inphase;

/**
 * 测试Demo
 * @author Administrator
 *
 */
public class Demo {
    public static void main(String[] args) {
         Divisor div = new Divisor();
         try {
             System.out.println(div.dividor(4, -1));
        } catch (DivisorNotZeroException e) {
            
            e.printStackTrace();
        } catch (DivisorNotMinusException e) {
            
            e.printStackTrace();
        }
    }

   
}

输出结果为:

com.inphase.DivisorNotZeroException: 您输入的是0,规定除数不能为0!
    at com.inphase.Divisor.dividor(Divisor.java:14)
    at com.inphase.Demo.main(Demo.java:13)

利用throws向上抛出异常测试案例

package com.inphase;

/**
 * 测试Demo
 * @author Administrator
 *
 */
public class Demo {
    public static void main(String[] args) throws DivisorNotZeroException, DivisorNotMinusException {
         Divisor div = new Divisor();
         System.out.println(div.dividor(4, -1));
        
    }
}
Exception in thread "main" com.inphase.DivisorNotMinusException: 您输入的是-1,规定除数不能为负数!
    at com.inphase.Divisor.dividor(Divisor.java:18)
    at com.inphase.Demo.main(Demo.java:11)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值