一、分析
Java语言的异常处理机制可以确保程序的健壮性,提高系统的开发效率,但是Java API提供的异常都是比较低级(这里的低级指的是“低级别的异常”),只有开发人员才能看的懂,才明白发生了什么问题。对于终端用户来说,这些异常基本上是天书,与业务无关,是纯计算机语言的描述。
这就需要我们对异常进行封装了。
二、场景
异常封装有三方面的优点:
1.提高系统的友好性
例如,打开一个文件,如果文件不存在,则会报FileNotFoundException异常,如果该方法的编写不做任何处理,直接上抛上层,则会降低系统的友好性,代码如下所示:
- public static void doStuff()throws Exception{
- InputStream is = new FileInputStream("无效文件.txt");
- /*文件操作*/
- }
此时doStuff方法的友好性极差:出现异常时(比如文件不存在),该方法直接把FileNotFoundException异常抛出到上层应用中(或者是终端用户),而上层应用(或用户)要么自己处理,要么接着抛出,最终的结果就是让用户对着“天书”式的文字发呆,用户不知道这是什么问题,只是系统告诉他”哦,我出错了,什么错误?你自己看着办吧“。
解决办法就是封装异常,可以把系统的阅读者分为两类:开发人员和用户。开发人员查找问题,需要打印出堆栈信息,而用户则需要了解具体的业务原因,比如文件太大,不能同时编写文件等,代码如下:
- public static void doStuff2()throws MyBussinessException{
- try{
- InputStream is = new FileInputStream("无效文件.txt");
- }catch(FileNotFoundException e){
- //为了方便开发和维护人员而设置的异常信息
- e.printStackTree();
- //抛出业务异常
- throw new MyBussinessException(e);
- }
- }
2.提高系统的可维护性
- public void doStuff(){
- try{
- //do something
- }catch(Exception e){
- e.printStackTrace();
- }
- }
这是很多程序员容易犯的错误,抛出异常是吧?分类处理多麻烦,就写一个catch块来处理所有异常吧。而且还信誓旦旦的说”JVM会打印出栈中的错误信息“,虽然这没有错,但是该信息只有开发人员自己才看的懂,维护人员看见这段异常基本上无法处理,因为需要深入到代码逻辑中去分析问题。
正确的做法是对异常进行分类处理,并进行封装输出,代码如下:
- public void doStuff(){
- try{
- //do something
- }catch(FileNotFoundException e){
- log.info("文件夹未找到,使用默认配置文件....");
- }catch(SecurityException 3){
- log.info("无权访问,可能原因是....");
- e.printStackTrace();
- }
- }
如此包装后,维护人员看到这样子的异常就有了初步的判断,或者检查配置,或者初始化环境,不需要直接到代码层级去分析了。
3.解决Java异常机制自身的缺陷
Java中的异常一次只能抛出一个,比如,doStuff方法有两个逻辑代码片段,如果在第一个逻辑片段中抛出异常,则第二个逻辑片段就不执行了,也就无法抛出第二个异常了。那么如何才能一次抛出两个异常呢?
其实,使用自行封装的异常可以解决问题,代码如下:
- class MyException extends Exception{
- //容纳所有异常
- private List<Throwable> causes = new ArrayList<Throwable>();
- //构造函数,传递一个异常列表
- public MyException(List<? extends Throwable> _causes){
- cause.addAll(_causes);
- }
- //读取所有的异常
- public List<Throwable> getException(){
- return causes;
- }
- }
MyException异常只是一个异常容器,可以容纳多个异常,但它本身并不代表任何异常含义,它所解决的是一次抛出多个异常的问题,具体调用如下:
- public static void doStuff()throws MyException{
- List<Throwable> list = new ArrayList<Throwable>();
- //第一个逻辑片段
- try{
- //Do something
- }catch(Exception e){
- list.add(e);
- }
- //第二个逻辑片段
- try{
- //Do something
- }catch(Exception e){
- list.add(e);
- }
- //检查是否有必要抛出异常
- if(list.size() > 0){
- throw new MyException(list);
- }
- }
这样一来,doStuff方法的调用者就可以一次获得多个异常,也能够为用户提供完整的例外情况说明。
那么在什么情况下,需要一个方法抛出多个异常呢?比如Web界面注册时,展示层依次把User对象传递给逻辑层,Register方法需要对各个Field进行校验并注册,例如,用户名不能重复,密码必须符合密码策略等,不要出现第一次提交系统提示”用户名重复“,在修改在提交后,系统提示“密码长度少6位”的情况,这种操作模式用户体验非常糟糕,最好的解决办法就是封装异常,建立异常容器,一次性地对User对象进行校验,然后返回所有异常。
三、建议
在开发的过程中,根据具体的情况和需要,对异常进行封装。
相关推荐
1. **Java基础语法**:作为项目的基础,开发者必须熟练掌握Java的基本语法,包括数据类型、变量、控制结构(如if语句和循环)、类与对象、继承、封装和多态等概念。 2. **图形用户界面(GUI)编程**:为了构建游戏...
鼓励团队成员相互审查代码,发现潜在问题,提高整体代码质量。 通过遵循阿里巴巴的Java开发规范,开发者可以编写出更专业、更标准的代码,降低项目风险,提升团队协作效率。这份规范不仅适用于阿里巴巴内部,也对...
《谷歌Java开发规范》是Google公司为Java开发者提供的一套详尽且权威的编码指导原则,旨在提升代码质量,提高团队协作效率,并降低维护成本。这份规范不仅关注语法层面的约定,更注重代码的可读性、可维护性和可扩展...
《阿里-泰山版Java开发手册》是一份由阿里巴巴集团发布的权威Java编程规范文档,旨在提升团队间的代码质量和可维护性,同时也是Java开发者自我提升的重要参考资料。这份手册详细规定了Java编程中的各种最佳实践、...
《阿里Java开发手册终极版》是一份详尽的编程指南,专为Java开发者设计,旨在提升代码质量和团队协作效率。这份手册由阿里巴巴集团编写,涵盖了多个关键领域,包括编程规约、异常处理、日志记录、单元测试、安全规范...
以下是对Java编程的30条实用建议,旨在帮助提升代码质量,提高开发效率。 1. **遵循编码规范**:使用统一的命名规则,如驼峰命名法,保持代码整洁。 2. **注释清晰**:为关键代码段添加注释,解释功能和逻辑,方便...
《阿里巴巴Java开发手册》是阿里巴巴集团技术团队精心编制的一份权威指南,旨在规范Java开发过程中的各种最佳实践,提升代码质量,确保项目可维护性和稳定性。这份手册包含了多个方面的规约,包括编程规约、异常日志...
以下是对标题和描述中所提及的Java代码编写规范的详细解释: 1. **命名规范**: - **PACKAGE的命名**:通常遵循小写字母组合,若有多个单词组成,各单词间以点分隔,如`com.example.myapp`。 - **CLASS的命名**:...
《阿里巴巴Java开发手册终极版v1.3.0》是阿里巴巴集团为了提升Java编程规范和代码质量而制定的一份详尽指南。这份手册涵盖了多个关键领域的最佳实践,旨在帮助开发者遵循一致的编码标准,提高代码可读性、可维护性和...
本文将围绕“JAVA优质代码编写的30条可行建议”的主题进行展开,详细介绍每一条建议背后的意义及其如何帮助开发者提高代码质量。 ### 1. 命名规范 - **变量命名**:采用有意义的名称,如`studentName`而非`sName`。...
总结,《Google Java Style Guide》是一份全面的Java编程规范,它涵盖了命名、格式、异常处理、类设计等多个方面,旨在提升代码质量和团队协作效率。遵循这些规范,不仅能让代码更易读,也能帮助开发者养成良好的...
Java和前端代码规范是软件开发中的重要组成部分,尤其是在大型企业如阿里巴巴这样的公司中,它们对于保持代码质量和团队协作至关重要。本压缩包包含了阿里巴巴制定的Java和前端开发的详细规范,帮助开发者遵循一致的...
《Java开发手册》是由阿里巴巴与Java社区的开发者共同制定的一份详尽的编程规范和最佳实践指南,旨在提升代码质量、提高开发效率、确保代码的可读性和可维护性。这份手册在不断的更新和优化中,截至2019年6月19日,...
这两份规范的结合使用,可以帮助开发者编写出更高质量、更易维护的Java代码,提高团队协作效率,减少潜在的bug,并且能够提升代码的可读性和可扩展性。对于新手和经验丰富的开发者来说,都是值得深入学习和遵循的...
Java编程语言以其强大的功能和广泛的应用领域而深受程序员喜爱,但是,...以上规范旨在提升代码质量,减少bug,增进团队协作。通过遵循这些规范,开发者可以写出更专业、更标准的Java代码,从而提升整个项目的品质。
《阿里巴巴Java开发手册终极版v1.3.0》是阿里巴巴集团为了规范Java开发过程、提升代码质量和开发效率而发布的一份权威指南。这份手册详细列出了Java开发中应遵循的最佳实践、编程规约和技术规范,旨在打造高效、可...
《阿里巴巴Java开发手册》是Java开发者的一份重要参考资料,它由阿里巴巴集团官方发布,旨在提升团队协作效率,保证代码质量,降低项目维护成本。这份手册覆盖了编程规约、异常处理、并发处理、设计模式等多个方面的...
书中内容涵盖命名规范、代码结构、注释技巧、异常处理、多线程编程等多个方面,旨在提升代码质量和可读性。 在《Java编程风格》翻译版.pdf中,你可以找到针对中文读者的详尽解释,使国内开发者能够更好地理解和应用...
3. **异常处理**:提倡使用具体异常而不是Exception,避免空指针异常,对异常进行分类和封装,以提供更精确的错误信息,同时鼓励编写异常测试用例。 4. **并发编程**:讲解如何正确使用线程同步机制,如...