* 异常的处理方式:
* 方式一:捕获处理
* 捕获处理的格式:
* try{
* 可能发生异常的代码;
* }catch(捕获的异常类型 变量名){
* 处理异常的代码;
* }
* 捕获处理要注意的细节:
* **** try块里声明的变量是代码块内局部变量,它只在try块内有效,在catch块中不能访问该变量。***
* 1.如果try块中代码出了异常经过处理之后,那么try-catch块外面的代码可以正常运行。
* 2.如果try块中出了异常的代码,那么在try块中出现异常代码后面的代码是不会执行了。
* 3.一个try块后面是可以跟多个catch块的,但只执行一个catch块。
* 4.一个try块可以捕获多种异常类型,但是捕获的异常类型必须从小到大排放。
*
* */
输出结果:ArithmeticException异常
0
/*
* 异常处理方式之二:抛出处理
* 抛出处理要注意的细节:
* 1.如果一个方法的内部抛出了一个编译型异常对象,那么必须要在方法上声明抛出
* 2.如果调用了一个声明抛出编译型异常的方法,那么调用者必须要处理异常
* 3.如果一个方法内部抛出了一个异常对象,那么throw语句后面的代码都不会再执行了(一个方法遇到了throw关键字,该方法也会马上停止执行的)
* 4.在一种情况下,只能抛出一种类型异常对象
* throw和throws两个关键字:
* 1.throw语句抛出的是一个异常实例,throws抛出的是一个异常类
* 2.throw用于方法内部抛出一个异常对象,throws是用于在方法声明上声明抛出异常类型的
* 3.如果一个方法内部抛出了一个编译时异常对象,那么该方法必须要声明抛出。
*
*对于编译型异常(Checked异常)要么显式声明抛出,要么显式捕获并处理它
* catch和throw结合使用的情况在大型企业中非常常用
* */
运行结果:ArithmeticException异常 (这时要注意c并没有输出)
/*
* 自定义异常类的步骤:自定义一个类继承Exception即可
* 定义异常类时需要提供两个构造器:一个是无参数的构造器;另一个是带一个字符串参数的构造器,
* 这个字符串将作为该异常对象的描述信息(也就是异常对象的getMessage()方法的返回值)
* 需求:模拟feiQ上线的时候,如果没有插上网线,那么就抛出一个没有插上网线的异常,如果已经插上网线了,
* 那么就正常显示好友列表
* */
运行结果:day10.NoIpException: 没有插网线
at day10.Demo10.feiQ(Demo10.java:22)
at day10.Demo10.main(Demo10.java:15)