异常处理有几种方式,如下:
1、try{}catch{}处理
try{
//可能出现异常独的代码
}catch(Exception e){
//捕获异常后如何进行处理
}finally{
//强制必须执行的一个代码块
}
2、throw语句,程序员自己指定的处理异常的方式
public class Test1 extends Test{
//你要抛出的异常,例如如下
throw new NumberFormatException();
}
3、throws语句代表执行方法时可能要产生的错误
public static void function() throws NumberFormatException {
}
重点来了,请看如下代码:
public class Test1 {
public static void main(String[] args) {
System.out.println(fun());
}
public static String fun(){
try{
System.out.println("11111111");
int x = Integer.parseInt("asdasdasd");
return "I am tyry!!!!!";
}catch(Exception e){
System.out.println("2222222222");
return "I am"+e.getMessage();
}finally{
System.out.println("3333333333333");
return "I am finally";
}
}
}
输出结果:
这个应该很容易理解,主函数--》fun函数--》tyr(类型转换错误)--》catch(但是return并没有真正的执行,因为finally代码块必须执行,因此相当于此时的return没有真正的执行)--》finally--》结束,即不管如何finally代码块都必须执行完。
那么再看下边的一组代码:
public class Test1 {
public static void main(String[] args) {
try{
fun();
}catch(Exception e){
System.out.println("I am main Exception");
}
}
public static void fun(){
try{
throw new Exception("I am fun Exception");
}catch(Exception e){
System.out.println(e.getMessage());
}finally{
System.out.println("3333333333333");
}
}
}
执行结果:
可以看到,我们的主函数里边并没有捕捉到异常,这是因为fun()函数执行时,虽然抛出异常了,但是被自身的catch捕获了,因此,主函数里边执行fun()方法并不会产生异常。
再看如下代码:
public class Test1 {
public static void main(String[] args) {
try{
fun();
}catch(Exception e){
System.out.println("I am main Exception");
}
}
public static void fun() throws Exception{
throw new Exception("I am fun Exception");
}
}
结果:
这是因为fun()函数的返回了一个异常被主函数捕获了,因此能打印主函数捕捉的异常。