`
ydbc
  • 浏览: 766825 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

提高你的Java代码质量吧:多使用异常,把性能问题放一边

 
阅读更多

一、分析

Java异常处理机制确实比较慢,这个“比较慢”是相对于诸如String、Integer等对象来说,单单从对象的创建上来说,new一个IOException会比String慢5倍,这从异常的处理机制上也可以解释:因为它执行fillStackTrace方法,要记录当前栈的快照,而String类则是直接申请创建一个内存创建对象,异常类慢一筹也在所难免。

二、场景

我们知道异常是主逻辑的例外逻辑,举个例子来说,比如我们能在马路上走(这时主逻辑),突然开过一辆车,我要避让(这是受检异常,必须处理),继续走着,不然一架飞机从我头顶飞过(非受检异常),我们可以选择继续行走(不捕捉),也可以选择指责噪音污染(捕捉,主逻辑的补充处理),在继续走着,突然一颗流星砸下来,这就没有选择,属于错误,不能做任何处理。

任何一个事物的处理都可能产生非预期的结果,问题是需要以何种手段来处理,如果不使用异常就需要依靠返回值的不同来进行处理了,这严重严重失去了面向对象的风格。

例如,用户登录的用例,就会在”例外事件“中说明”连续3次登陆失败即锁定用户账号“,这就是登陆事件的一个异常处理,具体到我们的程序中就是:

      public voidlogin(){
          try{
              //正常登陆
          }catch(InvalidLoginExceptionlie){
              //用户名无效
          }catch(InvalidPasswordExceptionpe){
              //密码错误的异常
          }catch(TooMouchLoginExceptiontmle){
              //多次登陆失败的异常
          }       
      }

如此设计则可以让我们的login方法更符合实际的处理逻辑,同时使主逻辑(正常登陆,try代表块)更加清晰。使用异常有很多优点,比如可让正常代码和异常代码分离,能快速查找问题(栈信息快照)等,但是异常有一个缺点:性能比较慢。

但是我们不能因为性能问题而放弃使用异常,难道我们的系统连如此微小的性能消耗都不允许吗?

三、建议

性能问题不是拒绝异常的借口

分享到:
评论

相关推荐

    编写高质量代码 改善Java程序的151个建议 PDF高清完整版

    《编写高质量代码 改善Java程序的151个建议》是一本专注于提升Java编程质量的专业书籍。书中详细列举了151条实用的建议,旨在帮助开发者编写出更高效、可读性更强且易于维护的Java代码。以下是对这些建议的详细解读...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    Java2Pas Java代码转pas代码

    Java2Pas是一个实用工具,主要用于将Java编程语言编写的源代码转换为Pascal语言的等效代码。这个工具对于那些需要在两种语言之间迁移代码或者理解不同编程语言语法的开发者来说非常有价值。Java和Pascal虽然都是面向...

    Java异常分装实例

    总的来说,Java异常分装是提高代码质量的重要手段,它允许我们编写更安全、更具预测性的程序。通过对异常进行分类和封装,我们可以更好地控制程序的错误处理流程,从而提高软件的稳定性。通过研究`exception_test`中...

    jni中用多线程调用java代码

    JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。在Android开发中,JNI常用于提升性能、调用系统库或者实现特定功能,如与C/C++库交互。本项目重点在于如何在JNI...

    java转js工具

    - 使用此类工具通常需要了解其输入和输出格式,以及如何处理可能的转换问题,例如Java的多线程和静态方法在JavaScript中可能的替代方案。 5. **应用领域** - 单页应用(SPA)开发:利用Java代码的转换,可以将...

    java 数组下标越界异常(ArrayIndexOutOfBoundsException)

    3. **使用集合类**:考虑使用ArrayList、LinkedList等集合类,它们在处理越界问题时更加智能,可以自动调整大小。 ### 防止异常的编程习惯 1. **初始化变量**:确保在使用索引之前,已经正确初始化了变量。 2. **...

    高质量java编程

    3. **异常处理**:Java的异常处理机制是其强项之一,书中详细阐述了如何使用try-catch-finally语句块来捕获和处理异常,以及如何自定义异常。 4. **集合框架**:Java集合框架是存储和管理数据的重要工具,书中涵盖...

    Java源码:比较经典的一些Java源代码,适合于初学者

    Java源码是学习编程语言的重要资源,特别是对于初学者来说,通过阅读和分析源代码,可以深入理解语言的特性和编程技巧。这个压缩包包含了140个经典的Java源代码程序,涵盖了各种基础到进阶的编程概念。下面,我们将...

    很强大的java代码混淆工具 Jocky

    Jockey跟其他混淆工具不同的是:它是直接对编译过程做文章,也就是在把java文件编译为class文件的过程中对代码进行混淆,混淆后的代码中包含很多JVM 指令,大家知道JVM指令是面向机器的,人类一般很难看懂!...

    Java开发技术大全(500个源代码).

    代码范例列表 第1章 示例描述:本章演示如何开始使用JDK进行程序的开发。 HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载...

    Java API文档 中文网页版

    总的来说,Java API文档中文网页版是Java开发者必备的参考资料,它可以帮助我们理解和使用Java平台提供的各种功能,提高编程的准确性和效率。在实际开发中,熟练掌握和查阅API文档是提升技能的关键步骤。

    医院管理系统(JAVA代码)

    【医院管理系统(JAVA代码)】是一个典型的数据库课程设计项目,主要使用JAVA编程语言来实现。在这样的系统中,开发者通常会关注以下几个核心知识点: 1. **JAVA基础**:JAVA是面向对象的语言,其核心概念包括类、...

    WinMerge(java代码比较工具)

    WinMerge是一款功能强大的文本和文件比较工具,尤其在Java开发领域中被广泛使用。它能够帮助开发者们快速、准确地找出两个代码文件之间...掌握并熟练使用WinMerge,无疑能够提升开发效率,降低出错概率,提高代码质量。

    代码审查表和代码审查实例

    代码审查是软件开发过程中的重要环节,它有助于提高代码质量,发现潜在的错误,以及确保遵循最佳实践。在Java编程中,代码审查同样至关重要,因为Java作为一种广泛应用的面向对象语言,其复杂性和广泛性需要严谨的...

    Struts的java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource异常的解决方法

    2. **版本不匹配**:如果你正在使用的Struts或其他依赖库需要特定版本的DBCP,而你提供的是不同版本的JAR,也可能导致此问题。检查你的项目依赖,确保所有组件的版本兼容。 3. **类加载器问题**:如果应用服务器有...

    java实现聊天室功能(全部代码,有界面)

    * Java 多线程编程:服务器端代码使用 Java 多线程编程来处理客户端的消息。 * Java Swing 库:服务器端代码使用 Java Swing 库来创建简单的界面。 * Java 集合框架:服务器端代码使用 Java 集合框架来存储用户信息...

    csv导入数据库 java源代码

    在IT行业中,CSV(Comma Separated Values)文件是一种常见的数据...如果你正在寻找如何将CSV数据导入数据库的Java实现,这个源代码将是一个很好的学习资源,它涵盖了从读取文件到处理数据再到与数据库交互的关键技术。

    基于tesseract的多线程OCR服务器的JAVA实现

    3. JAVA:Java是一种广泛使用的编程语言,尤其适合开发跨平台的应用程序。在本项目中,Java被选为实现多线程OCR服务器的语言,因为它提供了丰富的多线程API,如`java.util.concurrent`包,可以方便地创建和管理并发...

    java人脸识别源代码

    本项目调用了"JNI2OpenCV.dll",这是一个Java Native Interface (JNI) 的封装,允许Java代码直接调用OpenCV的C++接口,提高了性能和效率。 JNI是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。在本...

Global site tag (gtag.js) - Google Analytics