在之前的学习中我们学过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);
}
// 否则返回str在index索引的字符
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){}系统会提示错误信息,这时候不要在意,
当我们定义好了异常,并且抛出异常的时候,这个错误信息就会去掉,强迫症的人别害怕,哈哈.
附一张经常用到的异常继承关系图