程序中抛出空指针异常

这篇文章简要介绍了Java 8的最有用但又“毫不夸张”的功能。

程序员花费了无尽的时间来纠正最常见但最危险的错误之一,即Null指针异常。


空指针异常会导致我们的应用程序意外中断,并且很难预先检测到。

在许多情况下,当我们使用外部库和API时,空指针可能由于库/ API返回的值而出现。

由于这个原因,异常处理和从异常中进行逻辑恢复对于程序员来说是一项复杂的任务。

这需要高级程序员来检查代码,并定义控制流以进行错误恢复。

在Java 8中,添加了一个新的API –即“ Optional ”类,以帮助开发人员创建一个框架,以完全避免使用空指针,并为其应用程序定义第一级异常恢复策略。

明确地说–

Optional API提供了一个容器类,该容器类可用于包装方法调用的返回值-即使它们包含“ null”值。

它还提供了API,使程序员能够定义默认值,以便在遇到“ null”时返回。 这迫使开发人员在编码时考虑针对空值的缓解策略。

空检查可以通过两种方式执行–通过“ isPresent”和“ ifPresent”方法。

当我们调用“ isPresent ”时,如果存在非null值,则将返回“ true”。

另一方面,除了只检查该值是否为非null之外,如果我们希望将控制流委托给同一API调用中的另一个类,则可以使用“ ifPresent”方法。

此方法采用类型为“ Consumer ”的参数-本质上是一个功能接口。 该接口可以由您的应用程序中的类实现。

每当调用“ ifPresent ”时,我们都必须传递Consumer接口的实现,以便可以自动完成控制流委派。

从开发人员的角度来看–消费者的实现可以定义当存在非null值时要采取的措施。

此类还具有其他有用的功能,程序员可以使用这些功能来避免样板代码。

过滤器函数接受Predicate类型的参数。 如果返回值与谓词匹配,则返回过滤后的值,否则返回空的Optional对象。

在相似的行上,我们还有其他函数可以用来组织返回值。 考虑地图功能和平面 地图功能。

这两个函数均用于为返回值(如果存在)创建键-值对映射。

开发人员还可以根据逻辑标准的评估来定义返回值。

例如,考虑以下功能–

如果返回值为null,则orElse函数将在参数中返回提供的值

orElseGet返回值(如果存在)。 否则,如果不存在,它将调用Supplier类型的参数以返回自定义值。

orElseThrow启用对异常处理的精细控制。 如果不存在返回值,则可以引发自定义异常,或者可以将控制的飞行委托给Supplier类型-这又可以决定要抛出的异常。

总之,使用此API –我们可以在整个软件开发生命周期中受益

软件架构师可以通过标准化异常处理来减少代码审查周期。

QA工程师将报告较少的由空指针异常引起的错误。

软件设计人员可以预先考虑其异常处理逻辑,避免以后再进行愚蠢的修补。

开发人员最终将编写更有效的代码,从而缩短上市时间。

翻译自: https://www.javacodegeeks.com/2019/04/eliminating-pointer-exceptions-java-applications.html

程序中抛出空指针异常

程序中抛出空指针异常_从Java应用程序中消除空指针异常相关推荐

  1. java声明异常必须抛出吗_简述java中抛出异常的两种方式

    java编程中经常遇到异常,这时就需要利用java中的异常抛出机制,在java中提供了两种抛出异常的方法:try{}  catch() {}和throw. 一.抛出异常的两种方式 (1) 首先我们来看 ...

  2. java程序中用户名和密码_在Java应用程序中使用密码术

    java程序中用户名和密码 这篇文章描述了如何使用Java密码体系结构 (JCA),该体系结构使您可以在应用程序中使用密码服务. Java密码体系结构服务 JCA提供了许多加密服务,例如消息摘要和签名 ...

  3. java中静态方法可以被继承_关于java:静态方法中的继承

    为什么下面的代码会打印"MAIN"? public class Main { public static void method() { System.out.println(&q ...

  4. java中精确地小数_在Java等于方法中进行精确比较

    java中精确地小数 多年来,我一直在处理旧版Java代码,因此遇到了微妙的逻辑和性能问题,这些问题可以追溯到不正确覆盖的Object.equals(Object)方法. 尽管"等于&quo ...

  5. java异常在哪一层捕获_当在一个方法的代码中抛出一个检测异常时,该异常或被方法中的 ( )结构 捕获,或者在方法的 ( ) 中声明_学小易找答案...

    [填空题]当异常已经被定义时,必须通过( ) 语句来处理它. [填空题]Catch 子句包含( )的程序段 [单选题]下列java语言的常用异常类中,属于检测异常的是() [单选题]自定义异常类时,可 ...

  6. 为什么我可以在Java中抛出null? [重复]

    本文翻译自:Why can I throw null in Java? [duplicate] This question already has an answer here: 这个问题已经在这里有 ...

  7. 获取线程中抛出的异常信息

    1 ScheduledExecutorService service = Executors.newScheduledThreadPool(10); 2 // 从现在开始delay毫秒之后,每隔一天执 ...

  8. 第8集析构函数中抛出的异常

    前两篇文章讨论了对象在构造过程中(构造函数)和运行过程中(成员函数)出现异常时的处理情况,本文将讨论最后一种情况,当异常发生在对象的析构销毁过程中时,又会有什么不同呢?主人公阿愚在此可以非常有把握地告 ...

  9. 第7集 构造函数中抛出的异常

    上一篇文章简单讨论了一下对象的成员函数抛出异常时的处理情况.本文中将继续讨论当在构造函数中抛出异常时,程序的执行情况又如何?这有点复杂呀!而且主人公阿愚还觉得这蛮有点意思! 构造函数中抛出的异常 1. ...

最新文章

  1. 我在中关村给不了你国贸的爱
  2. 百度地图API(二)
  3. Caffe2:python -m caffe2.python.operator_test.relu_op_test
  4. hbase映射为hive表(转载+整理+自己验证)
  5. hdu5709-Claris Loves Painting【线段树合并】
  6. [二叉树|深搜|dfs] leetcode 404 左叶子之和
  7. 第二次作业—熟悉使用工具
  8. 虚拟串口软件VSPM使用手册
  9. android手机 联系人迁移,有什么软件能快速将手机通讯录的联系人传到另一个手机上...
  10. HDFS文件访问权限
  11. LC3 仿真器的安装和使用
  12. 重写yolo数据加载模块
  13. RNA-seq 详细教程:分析流程介绍(1)
  14. OpenCV_basis
  15. Git 上传代码到github上
  16. 程序员代码表白 爱你三千遍
  17. 全网通报:数模国赛作弊的后果
  18. 英汉词典c语言报告程序,C语言电子英汉词典程序设计报告-自动化1203-李煜明.docx...
  19. Ubuntu上安装CERN开发的ROOT软件
  20. 对话快手苍鹏:播放器还有什么新玩法?

热门文章

  1. 牛客题霸 [ 树的直径] C++题解/答案
  2. 上帝造题的七分钟(ybtoj-树状数组)
  3. P6295-有标号 DAG 计数【多项式求逆,多项式ln】
  4. P3352-[ZJOI2016]线段树【dp】
  5. AT1219-歴史の研究(历史研究)【回滚莫队】
  6. jzoj6800-NOIP2020.9.19模拟spongebob【枚举】
  7. nssl1522-简单数数题【dp】
  8. P2101-命运石之门的选择【dp,离散化】
  9. ssl1072-砝码称重【dp练习】
  10. 基于SSM+JBPM的智能化OA办公平台