首页 > 编程语言 >Java空指针异常优雅处理的方式

Java空指针异常优雅处理的方式

时间:2023-07-13 14:31:57浏览次数:44  
标签:Java System 优雅 isEmpty param1 println null out 指针


1 原因如下:



由于Java开发过程中一不注意就会造成空指针异常,但是如果要避免这些空指针异常我们就可能需要写如下啰嗦有无聊的语句:


if(test != null && test.size() > 0) {..............}



为了避免写这些无聊的语句和 避免NPE错误,我们可以用如下用法进行替代。



 



2 用法如下:



@Test
  
 
  

   public void test01() {
  
 
  
// 1 三目运算符替代处理-》jdk1.8   参考链接:javascript:void(0)
  
 
  

       ternaryOperatorHandler("test", null, null);
  
 
  

    
  
 
  
    // 2 数据判空替代处理-》jdk1.8   
  
 
  

       nullHandler(null, "test");
  
 
  

    
  
 
  
// 3 判空抛异常处理-》jdk1.8   参考链接:javascript:void(0)
  
 
  

       nullThrowExceptionHandler(null);
  
 
  

    
  
 
  
    // 4 equals处理-》jdk1.7
  
 
  

       equalsHandler(null, "he");
  
 
  

    
  
 
  
 // 5 检查集合是否为空(""或size()==0)  TODO:需要引入 commons-collections 依赖
  
 
  

       collectionNullHandler();
  
 
  

    
  
 
  
// 6 返回参数时,尽量不返回null,而是用 Collections.emptyList()、Collections.emptySet()、.............. 这种替代
  
 
  

    
  
 
  
 // 7 注意自动拆箱的危险,使用基本类型和自动拆箱的数据对比时,尤其注意null
  
 
  

       autoUnpackHandler();
  
 
  

   }
  
 
  

    
  
 
  

    
  
 
  

   /**
  
 
  

   * 注意自动拆箱的危险,使用基本类型和自动拆箱的数据对比时,尤其注意null
  
 
  

   */
  
 
  

   private void autoUnpackHandler() {
  
 
  

       int i = 1;
  
 
  

       Integer i1 = null;
  
 
  

       Integer i2 = 1;
  
 
  

       try {
  
 
  

           System.out.println(i == i1);
  
 
  

       } catch (Exception e) {
  
 
  

           System.out.println("使用基本类型和自动拆箱的数据对比时,Integer那个为null,会造成异常抛出");
  
 
  

           e.printStackTrace();
  
 
  

       }
  
 
  

       System.out.println(Objects.equals(i1, i2));
  
 
  

   }
  
 
  

    
  
 
  

    
  
 
  

   /**
  
 
  

   * 检查集合是否为空(""或size()==0)
  
 
  

   */
  
 
  

   private void collectionNullHandler() {
  
 
  

       // 1 空集合演示
  
 
  

       List<String> emptyList = new ArrayList<>();
  
 
  

       // --以下结果打印为:CollectionUtils.isEmpty(emptyList):true,  CollectionUtils.isNotEmpty(emptyList):false
  
 
  

       System.out.println("CollectionUtils.isEmpty(emptyList):" + CollectionUtils.isEmpty(emptyList) + ",  CollectionUtils.isNotEmpty(emptyList):" + CollectionUtils.isNotEmpty(emptyList));
  
 
  

       // --以下打印结果为:CollectionUtils.isEmpty(null):true,  CollectionUtils.isNotEmpty(null):false
  
 
  

       System.out.println("CollectionUtils.isEmpty(null):" + CollectionUtils.isEmpty(null) + ",  CollectionUtils.isNotEmpty(null):" + CollectionUtils.isNotEmpty(null));
  
 
  

   }
  
 
  

    
  
 
  

    
  
 
  

   /**
  
 
  

   * 判空抛异常处理
  
 
  

   *
  
 
  

   * @param param1 []
  
 
  

   * @since jdk1.8
  
 
  

   */
  
 
  

   private void nullThrowExceptionHandler(String param1) {
  
 
  

       try {
  
 
  

           String s = Optional.ofNullable(param1).orElseThrow(() -> new Exception("判断到当前为空,直接抛异常了"));
  
 
  

           System.out.println("param1=null,不会打印该条信息,因为前面泡了异常");
  
 
  

       } catch (Exception e) {
  
 
  

           e.printStackTrace();
  
 
  

       }
  
 
  

   }
  
 
  

    
  
 
  

    
  
 
  

   /**
  
 
  

   * 数据判空替代处理
  
 
  

   *
  
 
  

   * @param param1 []
  
 
  

   * @param param2 []
  
 
  

   */
  
 
  

   private void nullHandler(String param1, String param2) {
  
 
  

       // 第一种(Optional) @since jdk1.8
  
 
  

       Optional<String> optionalS = Optional.ofNullable(param1);
  
 
  

       optionalS.ifPresent(s -> System.out.println("param1=null,不会打印该条信息:" + s));
  
 
  

       Optional<String> optionalS2 = Optional.ofNullable(param2);
  
 
  

       optionalS2.ifPresent(s -> System.out.println("param2=test,会打印该条信息:" + s));
  
 
  

       // 第二种(Objects.isNull):以下是Objects的用法 @since jdk1.7
  
 
  

       // -------以下输出结果:Objects.isNull(null):true, Objects.isNull("test"):false
  
 
  

       System.out.println("Objects.isNull(null):" + Objects.isNull(param1) + ", Objects.isNull(\"test\"):" + Objects.isNull("test"));
  
 
  

       // 第三种 判断字符串是否为null或""   
  
 
  

       // TODO:需要引入 commons-lang3 依赖
  
 
  

       // -------以下输出结果:StringUtils.isEmpty(""):true, StringUtils.isEmpty(null):true
  
 
  

       System.out.println("StringUtils.isEmpty(\"\"):" + StringUtils.isEmpty("") + ", StringUtils.isEmpty(null):" + StringUtils.isEmpty(null));
  
 
  

   }
  
 
  

    
  
 
  

    
  
 
  

   /**
  
 
  

   * equals替代处理
  
 
  

   *
  
 
  

   * @param param1 []
  
 
  

   * @param param2 []
  
 
  

   * @since jdk1.7
  
 
  

   */
  
 
  

   private void equalsHandler(String param1, String param2) {
  
 
  

       System.out.println(Objects.equals(param1, param2));
  
 
  

   }
  
 
  

    
  
 
  

    
  
 
  

   /**
  
 
  

   * 三目运算符替代处理
  
 
  

   *
  
 
  

   * @param param1 []
  
 
  

   * @param param2 []
  
 
  

   * @param param3 []
  
 
  

   * @since jdk1.8
  
 
  

   */
  
 
  

   private void ternaryOperatorHandler(String param1, String param2, String param3) {
  
 
  

       // 三目运算符
  
 
  

       System.out.println(Optional.ofNullable(param1).orElse("a")); //test
  
 
  

       System.out.println(Optional.ofNullable(param2).orElse("a")); //a
  
 
  

       //或者 使用supplier生产   可传递方法
  
 
  

       System.out.println(Optional.ofNullable(param3).orElseGet(() -> "abc")); //abc
  
 
  

   }



 



3 参考链接如下:



https://mp.weixin.qq.com/s?__biz=MzU5NzgxMjgxNw==&mid=2247483658&idx=1&sn=fd3eed56377824985e2ec9396006f404&chksm=fe4cf234c93b7b225ab2c7796bb0f3f13eb49e281252165cb6af1fa92d401df64b2c1b30f6ea&mpshare=1&scene=1&srcid=0521XLzUAsp62w1oOmQf80va&key=d0af80d42a2df10ff5246705c5881768b3de046454ddecae9f19e9b5ed1b311371d2ae714587f5e4d51a812fa559d5f64fe17415c8859c85bed72aa3db4d8724f2db0953cfa72b674ad857b1b58e4b4e&ascene=1&uin=MjU2NDU3NDYwNg%3D%3D&devicetype=Windows+10&version=6206081f&lang=zh_CN&pass_ticket=QF6FJ2%2Fh1XOLI2uGJoJdQQdSmZGZXgj%2F7FP%2BalOU%2BX7dJfB4JD%2B6psrDbIaJ58cG



 



 



 



 



 



 



 



 



 

标签:Java,System,优雅,isEmpty,param1,println,null,out,指针
From: https://blog.51cto.com/u_13854513/6710923

相关文章

  • java项目配置druid监控页面
    druid监控页面如图: 满足条件:1.项目引入了druid相关的jar包 2.项目加入druid相关的配置#####druid监控#####WebStatFilter配置spring.datasource.druid.web-stat-filter.enabled=truespring.datasource.druid.web-stat-filter.url-pattern=/*spring.datasource.......
  • FIX tutorial in Java with QuickFIX/j simple example
    http://www.tuicool.com/articles/v2me6r 时间 2014-07-3112:22:00ArulkumaranKumaraswamipillaiblog主题Log4J Q.WhatisFIXProtocol? A.FIXstandsforFinancialInformationeXchange,whichisanopenprotocolintendedtostre......
  • 现代C++(Modern C++)基本用法实践:五、智能指针(Smart Pointers)
    概述c++效率较高的一个原因是我们可以自己定制策略手动申请和释放内存,当然,也伴随着开发效率降低和内存泄漏的风险。为了减少手动管理内存带来的困扰,c++提出了智能指针,可以帮助我们进行内存管理,有三种:std::unique_ptr是一种独占所有权的智能指针,它不允许多个指针指向同一个对......
  • 解决查看java占用的端口的具体操作步骤
    查看Java占用的端口在开发和运维过程中,我们经常需要查看Java应用程序所占用的端口。这对于排查问题、调试和监控都非常重要。本文将介绍几种方法来查看Java占用的端口,并提供相应的代码示例。方法一:使用jps命令jps命令是Java开发工具包(JDK)自带的一个命令行工具,用于查看Java进程的......
  • 解决查看java进程的参数的具体操作步骤
    查看java进程的参数在开发和运维过程中,我们经常需要查看Java进程的参数,以了解应用程序的配置和运行情况。本文将介绍如何使用命令行和Java代码来查看Java进程的参数。命令行方式1.jps命令jps命令是JDK自带的一个工具,用于查看Java进程的信息,包括进程ID和进程名。我们可以通过jp......
  • 如何实现布尔方法java的具体操作步骤
    实现布尔方法(Java)作为一名经验丰富的开发者,我来教你如何实现布尔方法(BooleanMethods)在Java编程中的应用。布尔方法是一种返回布尔值(true或false)的方法,它可以用于判断逻辑条件,决定程序的执行路径。整体流程下面是实现布尔方法的整体流程:步骤描述1定义布尔方法的名称......
  • java JDK安装及配置
    javaJDK安装及配置windows11jdk-8u261-windows-x64.exe1、点击安装,一路默认即可2、设置系统环境变量新建JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径C:\ProgramFiles\Java\jdk1.8.0_261,此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse等......
  • JavaScript
    引入JavaScript1.内部标签<script></script>2.外部引用<scriptsrc="引入JavaScript.js"></script>浏览器控制台使用1.alert(弹窗)alert();2.console.log(控制台打印)console.log();数据类型1.等于和绝对等于==等于(类型不一样,值相等,判断为true)===绝......
  • OAF:第五章-实现服务端java实体对象
    一、关于实体对象实体对象:实体对象为应用表封装了业务逻辑和DML操作;1.对象模型和关键类oracle.apps.fnd.framework.server.==OAEntityCache==:该缓存类用于存储特定实体对象的查询结果集。映射到相同实体对象的多个视图对象共享相同的实体缓存;oracle.apps.fnd.framework.server......
  • 解决生产环境调试 java的具体操作步骤
    生产环境调试Java在开发Java应用程序时,我们通常需要在生产环境中进行调试以解决问题和优化性能。本文将介绍如何在生产环境中进行Java调试的流程和步骤,并提供相应的代码示例。流程概述下表展示了生产环境调试Java的步骤及相应的操作。步骤操作1在项目中添加调试标志......