异常,自定义异常,一个简单明了的理解过程

        在之前的学习中我们学过IO流,在IO流中使用字符缓冲流(BufferedReader bf =newBufferedReader(new FileReader("abc.txt"));)的时候除了需要导包意外,还需要进行抛异常:import java.io.IOException;

        那么这个异常是什么,为什么要抛异常,抛异常能解决什么问题呢,今天的学习以后,让我对异常的用处有了了解.      

         在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。

        异常的根类是Throwable,其下有两个子类:Error与Exception,平常所说的异常指Exception.

1,严重错误Error,无法通过处理的错误

2,编译时异常Exception,编译时无法编译通过。如日期格式化异常

3,运行时异常RuntimeException,是Exception的子类,运行时可能会报错,可以不处理。如数学异常

        在异常中主要想介绍一下自定义异常,因为在工作中会经常需要自定义异常来为其他同事使用.也可以更加精确的对所使用的异常进行详细的描述.

        由于许多异常在JDK中是直接可以进行抛出使用的,但是有很多实际与生活中相关的异常都需要我们自定义异常类,那么java语言也为我们提供了自定义异常的功能.  

        通过阅读异常源代码:发现java中所有的异常类,都是继承Throwable,或者继承Throwable的子类。这样该异常才可以被throw抛出。说明这个异常体系具备一个特有的特性:可抛性:即可以被throw关键字操作。并且查阅异常子类源码,发现每个异常中都调用了父类的构造方法,把异常描述信息传递给了父类,让父类帮我们进行异常信息的封装。

       那么我们就通过一道例题来进行简单的定义一个自己的异常,也就是自定义异常.

       请用代码实现如下需求:

1,写一个方法实现获取字符串某个索引上的字符的功能

2,写一个测试测试方法调用上面写的方法,使用thows方式进行处理异常,并在main方法中调用这个测试方法

3,再写一个测试测试方法调用上面写的方法,使用try...catch方式进行处理异常,并在main方法中调用这个测试方法

     

publicclass Test {

//   1. 获取字符串某个索引上的字符的功能

      publicstaticchar charAt(String str, intindex) throws Exception {

//               当字符串为null抛出Exception("字符串不能为null")异常,

           if(null == str){

                 thrownew Exception("字符串不能为null");

           }

//               当字符串为""的时候抛出 Excetion("字符串不能为空")异常;

           if(str.equals("")){

                 thrownew Exception("字符串不能为空");

           }

//               index不在[0,str.length()-1] 之间的时,抛出Exception("索引越界") 异常.

           if(index < 0 || index >= str.length()){

                 thrownew Exception("索引越界"+index);

           }

//               否则返回strindex索引的字符

           returnstr.charAt(index);

      }

//   4.提供一个静态的方法testThrows() 用于测试charAt(String,intindex)方法

      publicstaticvoid testThrows() throws Exception{

             charc;

//          c = charAt(null, 0);

//          c = charAt("", 0);

//          c = charAt("abc",4);

             c= charAt("abc",1);

             System.out.println(c);

      }

     

//   5.提供一个静态方法testTryCatch(),用于测试charAt(String,intindex)方法

      publicstaticvoid testTryCatch(){

//         在方法中调用charAt(String,int index)方法;

//              i.注意需要测试每一种情况

//         使用try...catch方式对异常进行处理

           try{

             charc;

//          c = charAt(null, 0);

//          c = charAt("", 0);

//          c = charAt("abc",4);

             c= charAt("abc",1);

             System.out.println(c);

           }catch(Exceptione){

                 System.out.println("捕获异常");

                 e.printStackTrace();

           }

           System.out.println("程序继续");

      }

      publicstaticvoid main(String[] args) {

//         main方法中,调用testThrows 方法.

//         testThrows();

//         main方法中,调用testTryCatch方法

            testTryCatch();

      }   

}

       在例题中呢,我们在写完publicstaticchar charAt(String str, intindex){}系统会提示错误信息,这时候不要在意,

当我们定义好了异常,并且抛出异常的时候,这个错误信息就会去掉,强迫症的人别害怕,哈哈.

      附一张经常用到的异常继承关系图






       

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值