java中异常和捕获处理

1.异常时程序中导致程序中断的一种指令流,下面来了解异常.
在这里插入图片描述
运行结果
这时候出现异常,程序不执行了,而是进行错误信息输出.
在这里插入图片描述
2.如果希望程序出现异常依然正常完成的话,那么使用如下进行异常处理.

try语句中捕获可能出现异常的代码,如果在try中产生了异常,则程序会自动跳转到catch语句中找到匹配的异常类型进行相应的处理,最后不管程序是否会产生异常,肯定都会执行finally语句,finally就作为异常统一出口.finally可以不写,则会在catch()块运行结束后,跳转到try…catch块继续执行.

try{
   可能出现异常的语句;
   }[catch(异常类型 异常对象){
          处理异常;
  }catch(异常类型 异常对象){
           处理异常;
  }catch(异常类型 异常对象){
            处理异常;
  }...... ]finally{
            不管是否出现异常,都执行此代码.
  }]

3.处理异常
在这里插入图片描述
运行结果
加入异常,程序中有了异常,程序也可以执行完毕,异常处理输出信息调用printStackTrace()方法进行异常信息打印.打印最完整.
在这里插入图片描述
也可以加入finally语句
在这里插入图片描述
运行结果
在这里插入图片描述
4.现在又有新问题,现在执行数学计算的两个参数是由程序默认提供的,那么如果这两个参数通过初始化参数传递呢?
在这里插入图片描述
这时候数据由外埠传送,那么在这种情况,可能出现以下几种问题
1.执行时不是输入参数,ArrayIndexBoundsException,未处理,
2.输入的参数不是数字,NumberFormatException未出理
3.被除数为0,已处理

可以发现上面程序有3中异常,程序只能处理一种,程序依然会直接中断,所以为了保证程序出现3个异常后依然可以正确处理,可以加入catch捕获多种异常.
在这里插入图片描述
5.以后肯定会接触不常见的异常,异常类最高继承的是Throwable,Throwable下有两个子类(主要是Exception).
Error:指的是JVM错误,这时候程序没有执行,无法处理
Exception:指的是程序中出现的错误信息,可以进行异常处理.

实际上catch捕获异常,就和方法接收参数一样的,那么按照对象多态讲,所有的异常都是Exception的子类,那么这时候所有异常类都可以使用Exception来接收.

6.异常捕获范围问题
在java中,所有捕获范围小的异常,必须放在捕获范围大的异常前,否则在程序编译出现错误.
在编译时出现错误,因为ArrayIndexOutOfBoundsException要比异常(Exception)捕获范围小.
在这里插入图片描述

7.throws关键字
主要是在方法定义上使用的,表示此方法中不进行异常处理,而交给被调用处理.

7.1定义不处理异常的方法
div()方法中抛出一个异常, 表示所有的异常交给被调用处进行处理.

class My{
   public int div(int x,int y)throws Exception{     //此方法不处理异常
       return x/y;
       }
   }

7.2调用throws声明方法
在这里插入图片描述
运行结果
在这里插入图片描述
在调用throws声明方法时,一定要使用异常处理操作进行异常的处理,属于强制处理,而现在主方法本身也属于方法,那么实际在主方法上也可以继续使用throws进行异常的抛出.
此时表示异常继续向上抛,相当于交个JVM进行异常的处理.
在这里插入图片描述
8.throw关键字
之前所有的异常对象都是由JVM自动进行实例化操作的,现在用户也可以自己手工一个实例化对象,这是通过throw完成.
在这里插入图片描述
运行结果
由于throw关键字,会手工抛出一个异常类的实例化对象,而此时程序必须使用try…catch语句进行处理,或者在方法上增加一个throws声明,否则出错.
在这里插入图片描述

9.throw和throws的区别
1.throw:用户手工抛出异常类的实例化对象
2.throws:用于方法的声明上,表示此方法不处理异常,而将异常交给程序被调用处处理.

10.异常处理的标准格式
异常处理try…catch最常见,还存在try、catch、finally、throw、throws使用的异常处理格式.

现在定义程序实现要求.
在这里插入图片描述
运行结果
满足了基本要求,不管是否出现异常,都将异常交给被调用处输出,同时每次操作都会指定固定的输出.
在这里插入图片描述

11.在try语句中有一个return语句,那么紧跟在try后的finally语句代码会不会执行?什么时候执行,是在return前还是后?
finally一定会执行,并且是在return前执行.

12.RuntimeException
RuntimeException也属于Exception的子类,定义的异常可以选择性处理,如果没有处理,会交给JVM默认进行处理.而Exception定义异常必须处理.

自定义异常类
java中提供大量异常类,但是异常类型在开发中不满足需要m所以系统构架中往往会提供一些新的异常类型,来表示一些特殊的错误,这种操作就称为自定义异常类.可以让一个类继承Exception(必须处理)或RuntimeException(选择处理).
在这里插入图片描述
运行结果
使用自定义MyException类继承Exception,所以此类为一个异常表示类,用户可以在程序中使用throw进行异常对象的抛出.
在这里插入图片描述

发布了60 篇原创文章 · 获赞 3 · 访问量 2200

猜你喜欢

转载自blog.csdn.net/ysy_1_2/article/details/104247667