多异常处理
捕获处理:
1多个异常分别处理
2多个异常一次捕获多次处理
3多个异常一次捕获一次处理
声明抛出异常:
声明上使用,一次声明多个异常
运行时异常被抛出可以不处理。即不捕获也不声明抛出
如果父类抛出了多个异常,子类覆盖父类方法时,只能抛出相同的异常或者是他的子集
父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出
当多异常处理时,捕获处理,前边的类不能是后边类的父类
在try/catch后可以追加finally代码块,其中的代码一定会被执行,通常用于资源回收。
代码演示:
void show(){ //不用throws
try{
异常代码;//产生异常,直接捕获处理
}catch(Exceptione){
//处理方式
}
}
一个try 多个catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对每种异常信息进行不同的捕获处理。
void show(){ //不用throws
try{
异常代码;//产生异常,直接捕获处理
}catch(XxxExceptione){
//处理方式
}catch(YyyExceptione){
//处理方式
}catch(ZzzExceptione){
//处理方式
}
}
注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
try finally 组合: 对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出。异常是没有捕获处理的。但是功能所开启资源需要进行关闭,所有finally。只为关闭资源。
void show(){//需要throws
try{
异常代码;
}finally{
//释放资源
}
}
例题
请用代码实现如下需求:
写一个方法实现获取字符串某个索引上的字符的功能
写一个测试测试方法调用上面写的方法,使用thows方式进行处理异常,并在main方法中调用这个测试方法
再写一个测试测试方法调用上面写的方法,使用try...catch方式进行处理异常,并在main方法中调用这个测试方法
/*
定义 Test类
提供一个静态方法:publicstatic char charAt(String str, int index) 用于获取字符串str,index索引处的字符
在方法中charAt(String,intindex)
当字符串为null抛出 Exception("字符串不能为null")异常,
当字符串为"" 的时候抛出 Excetion("字符串不能为空") 异常;
当index不在[0,str.length()-1] 之间的时,抛出Exception("索引越界") 异常.
否则返回str在index索引的字符
提供一个静态的方法testThrows()用于测试charAt(String,intindex)方法
在方法中调用charAt(String,int index)方法;
注意需要测试每一种情况
体会: 程序一旦遇到异常后面的代码就不执行了
注释运行过测试的代码,继续测试下一种情况
使用throws方式对异常进行处理
在main方法中,调用本方法
提供 一个静态方法testTryCatch(),用于测试charAt(String,int index)方法
在方法中调用charAt(String,int index)方法;
i.注意需要测试每一种情况
使用try...catch方式对异常进行处理
在main方法中,调用本方法.
*/
publicclass Test10 {
// 获取字符串某个索引上的字符的功能
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);
}
// 提供一个静态的方法testThrows() 用于测试charAt(String,int index)方法
publicstaticvoid testThrows() throws Exception{
charc;
// c = charAt(null, 0);
// c = charAt("", 0);
// c = charAt("abc",4);
c= charAt("abc",1);
System.out.println(c);
}
// 提供 一个静态方法testTryCatch(),用于测试charAt(String,int index)方法
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(Exception e){
System.out.println("捕获异常");
e.printStackTrace();
}
System.out.println("程序继续");
}
publicstaticvoid main(String[] args) {
// 在main方法中,调用testThrows 方法.
// testThrows();
// 在main方法中,调用testTryCatch方法
testTryCatch();
}
}