iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java中空指针异常该如何避免详解
  • 439
分享到

Java中空指针异常该如何避免详解

2024-04-02 19:04:59 439人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

Java中如何避免空指针异常,这也是由初级程序员成长到中级程序员的时候经常会遇到的问题。 程序员不知道或不信任正在使用的约定,并且小心的检查着null。还有当程序员写代码的时候,总是

Java中如何避免空指针异常,这也是由初级程序员成长到中级程序员的时候经常会遇到的问题。

程序员不知道或不信任正在使用的约定,并且小心的检查着null。还有当程序员写代码的时候,总是会依赖于通过返回空(NULL)来表明某些意义,因此需要调用者去检查Null。

有两种空指针的检查场景:

  • 期望的结果就是null。
  • 期望的结果不是null。

第二种很简单,可以通过用assert或者允许程序报错,例如抛出NullPointerException。Assertions是一个从Java1.4加进来的高度未被利用的特性,语法是:

assert <condition>

或者

assert <condition> : <object>

condition是一个布尔表达式,object是一个对象(其toString()方法的输出将会被包含在错误里)。

校对注:我测试了下,jdk1.4及其以上,运行前设置vm参数-ea

public static void main(String[] args) {String name = null;assert (name != null) : "name为空null";}
Exception in thread "main"; java.lang.AssertionError: 变量name为空nullat LogUtil.main(LogUtil.java:37)

如果condition为false的话,assert将会抛出一个Error(AssertionError)。默认Java会忽略断言你可以通过在JVM中传入一个-ea参数来启用断言。

你可以为单独的一个包或者类启动关闭assertions。这意味着你可以在开发和测试的时候通过断言来验证代码,在发布产品的时候关闭它,尽管我下面展示的测试中并没有因为assertions而损失性能。在这个代码段中不用断言也可以,因为他会运行失败的,就像加了断言一样。唯一的区别是有了断言可能会发生的更快一些,更有意义,并且会附加一些额外的信息,而这可以帮助你弄明白失败的原因。

第一种有一点棘手。如果你对不能控制正在调用的这段代码,那你就卡住了。如果Null是一个合理的返回值,你就应该检查它。如果是你能够控制的代码,那就是个完全不同的故事情景了。尽量避免用NULL作为返回值。对于返回Collections的集合很容易,返回Empty(一个空集合或者数组),而不是一直用null作为返回值。对于不是返回Collections的方法会有一点复杂。考虑下面这个例子:

public interface Action {
  void doSomething();}public interface Parser {
  Action findAction(String userInput);}

Parser采用用户的输入作为参数,然后做一些事情(例如模拟一个命令行)。现在你可能会返回null,如果没找到对应输入的动作的话,这就导致了刚才说过的空指针检查。

一个可选的解决方案是永远不要返回null,而是返回一个空对象

public class MyParser implements Parser {
  private static Action DO_NOTHING = new Action() {
    public void doSomething() {  }
  };

  public Action findAction(String userInput) {
    // ...
    if (  ) {
      return DO_NOTHING;
    }
  }}

比较这段代码:

Parser parser = ParserFactory.getParser();if (parser == null) {
  // now what?
  // this would be an example of where null isn't (or shouldn't be) a valid response}Action action = parser.findAction(someInput);if (action == null) {
  // do nothing} else {
  action.doSomething();}

和这段:

ParserFactory.getParser().findAction(someInput).doSomething();

这是个更好的设计,因为足够简洁,避免了多余的判断。

即便如此,或许比较合适的设计是:findAction()方法之恶杰抛出一个异常,其中包含一些有意义的错误信息—–特别是在这个案例中你依赖于用户的输入。

让findAction()方法抛出一个异常而不是简单的产生一个没有任何解释的NullPointerException 要好得多。

try {
    ParserFactory.getParser().findAction(someInput).doSomething();} catch(ActionNotFoundException anfe) {
    userConsole.err(anfe.getMessage());}

或者你认为try/catch 的机制太丑了,你的action应该跟用户提供一个反馈而不是什么都不做:

public Action findAction(final String userInput) {
    
    return new Action() {
        public void doSomething() {
            userConsole.err("Action not found: " + userInput);
        }
    }}

补充:个人在做项目时,对NullPointerException的几点总结,请网友拍砖!!!多多提意见,

1.对于别人接口的返回对象要做非空判断,因为我们不清楚获得的对象会不会为空,对于Collection Map 我一般会调用CollectionUtils MapUtils ,对于返回的String对象,我会调StringUtils.isNotEmpty()进行非空判断。他们中isNotEmpty不仅判断了NULL 还判断了空集合和空串。例如从数据中查询的结果。工作流中返回的定价URL

2. 对于自己创建的对象,要留心对象进行哪些操作,中间会不会造成对象为空,如果可能加非空判断,尤其是对于集合的操作,很容易就报空指针!!!所以每次对操作集合时,我都会非常的留心。

3. 对于前台的领域对象要非常的留心,因为这些对象是框架创建的,假如我没有在前台的文本框内输入值,虽然提交时后台获得的是空串,但发生NullPointerException的概率很高。

4. 对于String 的操作尽量使用apache 的StringUtils类,与String相比这个是非常的安全。对于集合的操作使用apache的CollectionUtils 、MapUtils, 相比apache工具类的执行效率也非常的高,比如StringUtils.split();

有人说过多的判断会影响性能,我个人认为这里的性能牺牲和系统的安全相比是微不足道的。

总结

到此这篇关于Java中空指针异常该如何避免的文章就介绍到这了,更多相关Java空指针异常内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中空指针异常该如何避免详解

本文链接: https://www.lsjlt.com/news/144060.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中空指针异常该如何避免详解
    Java中如何避免空指针异常,这也是由初级程序员成长到中级程序员的时候经常会遇到的问题。 程序员不知道或不信任正在使用的约定,并且小心的检查着null。还有当程序员写代码的时候,总是...
    99+
    2024-04-02
  • java怎么避免空指针异常
    在Java中,可以通过以下方法避免空指针异常:1. 对于可能为null的对象进行null检查。在使用可能为null的对象之前,先要进...
    99+
    2023-08-19
    java
  • PHP8如何通过Nullsafe Operator避免空指针异常?
    PHP8如何通过Nullsafe Operator避免空指针异常?摘要:Nullsafe Operator是PHP8版本引入的新特性之一,它提供了一种简洁而有效的方式来处理空指针异常。本文将详细介绍Nullsafe Operator的用法,...
    99+
    2023-10-22
    PHP Nullsafe Operator 空指针异常避免
  • 如何使用PHP8中的Nullsafe Operator避免空指针异常?
    如何使用PHP8中的Nullsafe Operator避免空指针异常?随着PHP8的发布,PHP语言中引入了一个重要的新特性——Nullsafe操作符,该操作符可以帮助开发者更简洁高效地处理可能引发空指针异常的代码。本文将详细介绍如何使用N...
    99+
    2023-10-22
    PHP 空指针异常 Nullsafe Operator
  • java中空指针异常如何解决
    java中空指针异常如何解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据...
    99+
    2023-06-14
  • Java使用Optional实现优雅避免空指针异常
    目录摘要Optional 介绍Optional 使用创建 Optional 对象orElse()与orElseGet()map()与flatMap()filter()总结摘要 空指针...
    99+
    2023-03-21
    Java Optional空指针异常 Java Optional空指针 Java Optional
  • Java中如何处理空指针异常
    这篇文章主要讲解了“Java中如何处理空指针异常”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中如何处理空指针异常”吧!NullPointerException 是 Java 代码中...
    99+
    2023-06-30
  • 如何避免空指针调用
    本篇内容介绍了“如何避免空指针调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题为了避免空指针调用,我...
    99+
    2024-04-02
  • Java怎么使用Optional实现优雅避免空指针异常
    本文小编为大家详细介绍“Java怎么使用Optional实现优雅避免空指针异常”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么使用Optional实现优雅避免空指针异常”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-07-05
  • 如何在java项目中避免出现空指针
    如何在java项目中避免出现空指针?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java 避免出现NullPointerException(空指针)的方法总结Java应用中抛出...
    99+
    2023-05-31
    java ava 目中
  • java空指针异常如何捕获
    在Java中,可以使用try-catch语句块来捕获空指针异常(NullPointerException)。以下是一个简单的例子: ...
    99+
    2024-02-29
    java
  • eclipse空指针异常如何解决
    当程序运行时出现空指针异常,表示某个对象为空,无法调用其方法或访问其属性。解决空指针异常的方法有以下几种:1. 检查空指针异常发生的...
    99+
    2023-08-19
    eclipse
  • Golang语言如何避免空指针引发的panic详解
    目录01、介绍02、结构体指针类型返回值03、结构体指针类型 value 的 Map04、defer 延迟调用05、总结01、介绍 在 Golang 语言项目开发中,变量操作不当就会...
    99+
    2024-04-02
  • java中jdbctemplate空指针异常怎么解决
    在Java中使用JdbcTemplate时,可能会出现空指针异常。要解决空指针异常,可以按照以下步骤进行:1. 检查JdbcTemp...
    99+
    2023-10-30
    java
  • 如何解决Switch报空指针异常
    这篇文章给大家介绍如何解决Switch报空指针异常,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前几天重新看 《阿里巴巴Java开发手册》有一条这样的规约:出于好奇,打算研究一下!,强...
    99+
    2024-04-02
  • 如何解决Java自动拆箱空指针异常
    这篇文章主要讲解了“如何解决Java自动拆箱空指针异常”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决Java自动拆箱空指针异常”吧!问题重现下面通过一个简单的示例才重现一下异常出现的...
    99+
    2023-06-15
  • java抛出空指针异常如何处理
    在Java中,可以使用以下方法来处理空指针异常: 使用条件判断:在可能出现空指针异常的地方使用条件判断来检查对象是否为空。例如: ...
    99+
    2024-02-29
    java
  • C++开发注意事项:避免C++代码中的空指针异常
    C++开发中,空指针异常是一种常见的错误,经常出现在指针没有被初始化或被释放后继续使用等情况下。空指针异常不仅会导致程序崩溃,还可能造成安全漏洞,因此需要特别注意。本文将介绍如何避免C++代码中的空指针异常。初始化指针变量C++中的指针必须...
    99+
    2023-11-22
    注意事项 C++编程 空指针异常
  • Java利用Optional解决空指针异常
    目录背景介绍案例基本用法解析转换与过滤案例优化源码解析总结背景介绍 Java 8 引入了一个十分实用的 Optional 类,它主要是为了解决空指针异常(NullPointerExc...
    99+
    2024-04-02
  • Java中怎样处理空指针异常
    程序中的变量是 null,就意味着它没有引用指向或者说没有指针。这时,我们对这个变量进行任何操作,都必然会引发空指针异常,在 Java 中就是 NullPointerExceptio...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作