1.异常体系包括Error和Exception。其中Error代表的系统级别错误属于严重问题,一旦出现问题,sun公司会把问题封装成error对象给出来;Exception代表我们程序中容易出现的问题,程序员通常会用Exception以及他的孩子来封装程序中出现的问题
以下通过代码进一步初步学习异常知识
首先是编译式异常:
这里我们先定义一个字符串时间,并把字符串时间解析成Java中的一个日期对象
我们注意到第25行代码中的parse出现了红色提示,此时就是出现了编译式异常,其目的就是提醒程序员这里的程序很容易出错,请注意!
此时我们可以将这里的异常外抛,让这个方法继承Exception,详见第19行代码
与此同时,我们的主函数中还可以添加try,catch结构用于监视代码,观察用户在操作的过程中是否出现异常,其中第十五行代码用于运行时打印异常信息
接下来时运行式异常:
其特点是编译时不报错,运行时出现异常
然后是运行式异常中常见的空指针异常
2.搞清楚异常的作用
作用一:用于定位程序中bug的定位
作用二:作为方法内部的特殊返回值,以便告诉上层调用者方法内部的问题
以下通过代码进一步学习:
这里先定义一个方法,用于求两个数的除的结果,并返回这个结果
为了进一步完善方法,我们可以用条件语句返回一个异常给上层,用于告知代码执行的成功与否
我们继续在主函数中用try,catch结构监视代码
若执行成功,则返回try中的内容
若执行失败,catch会捕捉异常,并返回catch中的内容
以下是对前两节关于异常的学习总结
3.自定义异常
由于java无法为这个世界上所有的问题提供异常类来代表,我们需自定义异常类来管理问题
其中自定义异常分为自定义运行式异常和自定义编译式异常
以下是自定义编译式异常的书写格式和使用方法
以下是代码实现
首先我们引入例子,定义方法,内容要求是公司的系统只要收到了年龄小于1岁或者大于200岁就是一个年龄非法异常
其中第17行代码使用的throws关键字的TextIlegal就是上文我们自定义的异常
继续用try,catch结构监视代码
以下是运行结果
以下是自定义运行式异常的书写格式和使用方法,与自定义编译式异常类似
以下是代码实现
继续如上文引入例子
不同于自定义编译式异常,第13行可省略throws关键字
4.异常的处理方案
方案一:底层异常层层向上抛出,最外层捕获异常,记录下异常并响应提示
方案二:最外层捕获异常后,尝试修复
异常处理常见方案:
以下是代码实现:
处理方案一:
我们用上文用到过的例子实现
运行结果:
处理方案2:
我们定义一个方法,引入一个交易的例子
此时我们输入正常的数字,程序正常进行
若我们输入乱码,程序捕获到异常提示用户,代码重新运行直至接收到正常的数字