今天遇到了一个问题,查询一条数据,返回用list接,发现少了2个值(ssh框架)。执行SQL少的这两个字段的值为null。上图说明一下:

可以看到第一次查询没有角标38、39的值。

是同一条SQL,第一张图数据库执行SQL,

查询到这两个字段值为null,用list接回来后没有角标38、39,如图所示。

原因还没有去代码测试,网上查询说list可以接null。

要说的不是这个问题,而是对于null值的一些个人粗浅见解。

首先个人觉得对于一个程序员来说,在写代码的时候需要注意的一点就是空值判断。

因为我们写的程序是处理数据的,如果没有数据不仅写的代码没有存在的意义,

而且会报空指针的运行异常。程序之所以运行是建立在有数据的基础之上的。

所以良好的代码应该首先考虑空值的问题。这点在很多经典的代码中都可以看到。

上图为spring框架的源码,就做了非空判断。

不仅如此,在Java语言中基本数据类型都接受null值而不会报错。

这是为什么呢?

1.String 对象:直接判断是否为 null,如果为 null 给 null 对象赋值为”null”。

2.非 String 对象:通过调用String.valueOf方法,如果是 null 对象,就返回”null”,否则调用对象的toString方法。

通过上面的处理,可以保证打印 null 对象不会出错。

原来Java语言在对于null值的处理上采用这样的方式解决的。从而保证了不会报错。

但是我们借助Java语言写代码的时候自己构造的一些对象是否为null只能自己去做非空限制。而且是必须要做的,

它能保证你的程序运行良好而不会因为空值报这种低级错误。

null不是任何一种数据类型,与其说它是一种特殊的值,不如说它是一种特殊情况下(数据为空)的处理策略。

讲的不够详细,也是理解还不够全面深入,null不止上面说的几点中会遇到,很多地方都有,

例如mybatis动态sql中where条件的拼接就要先判断是否为 "" | null。

想说两点:

1.良好的代码从预防null做起。如果写代码提前考虑到null的情况,能避免产生很多不必要的bug。

2.做到这一步是走向编程高手的第一步。个人感觉写代码也是有层次划分的。

起步是先从预防null做起,逐步考虑到的方面会越来越多,如高复用(重构)、高性能等,

代码水平和质量会越来越高,而且也能越来越考虑的视野扩大、层次提高,离架构师越来越近。

这是本人的第一篇博客,感谢进来看的老铁,

希望我们能一起努力、共同进步,同时也希望能多向你们学习、请教。

关于程序null值的见解的更多相关文章

  1. 请求接口获取到的数据其中出现null值,处理的时候导致了程序crash,解决方案如下:

    第一种方法是使用分类给字典添加一个类方法,将字典中的null值全部替换为空字符串,代码如下: .h文件代码: @interface NSDictionary (DeleteNull) + (id)ch ...

  2. SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值

    我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...

  3. null值与空值比较

    JAVA中判断字符串或者数值是否为空时,常用到  .equals函数对空值进行判断 例如  values[5]为参数值 "".equals(values[5]) 常在if语句判断中 ...

  4. [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. 网络请求的null值处理

    最近项目中经常有遇到从服务器请求的数据是null的情况,这种情况下如果用[dic objectForKey:@"key"]方法,程序会发生崩溃现象,因为项目是以前的老项目,而且有太 ...

  6. [改善Java代码]equals应该考虑null值的情景

    建议46: equals应该考虑null值情景 继续上一建议的问题,我们解决了覆写equals的自反性问题,是不是就很完美了呢?再把main方法重构一下: public class Client { ...

  7. [改善Java代码]提防包装类型的null值

    建议26: 提防包装类型的null值 我们知道Java引入包装类型(Wrapper Types)是为了解决基本类型的实例化问题,以便让一个基本类型也能参与到面向对象的编程世界中.而在Java 5中泛型 ...

  8. [改善Java代码]别让null值和空值威胁到变长方法

    建议5:别让null值和空值威胁到变长方法 public class Client { public void methodA(String str,Integer... is){ } public ...

  9. 查询反模式 - 正视NULL值

    一.提出问题 不可避免地,我们都数据库总有一些字段是没有值的.不管是插入一个不完整的行,还是有些列可以合法地拥有一些无效值.SQL 支持一个特殊的空值,就是NULL. 在很多时候,NULL值导致我们的 ...

随机推荐

  1. 算法详解之最近公共祖先(LCA)

    若图片出锅请转至here 概念 首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节 ...

  2. decimal.ToString()问题

    decimal dt = 1.00M;            decimal dt1 = 1M;                         bool d = dt == dt1;         ...

  3. Js笛卡尔乘积

    self.getDescartesSku = function (selSaleProp, i, nowLst, allALst) {         if (selSaleProp.length = ...

  4. 借助URLOS快速安装Discuz论坛

    ### 简介 Discuz!是个可免费下载的PHP网络论坛程序,简称DZ,由戴志康所创立,当前最新版本是Discuz! X3.4.前身为Crossday Bulletin,最初改自XMBForum,尔 ...

  5. 并发编程-concurrent指南-阻塞队列-数组阻塞队列ArrayBlockingQueue

    ArrayBlockingQueue类是实现了BlockingQueue. ArrayBlockingQueue是一个有界的阻塞队列,其内部实现是将对象放在一个数组中. 放入元素方法: (1) add ...

  6. Hyperledger Fabric 命令整理

    Peer节点命令 Peer node start 启动一个Peer节点: peer node start status 获取当前节点的状态信息 peer node status reset 重置当前节 ...

  7. orm的操作

    ORM的对应关系 ​ 类 —— > 表 ​ 对象 ——> 记录(数据行) ​ 属性 ——> 字段 class Book(model.Model): title=models.Char ...

  8. 关于AndroidStudio在编译时无法解析和拉取依赖的问题和无法访问Jcenter服务器的问题

    问题描述:在编译时出现如下错误:Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the....一般是被墙了.偶 ...

  9. Java学习笔记之---方法和数组

    Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...

  10. Bzoj 2563: 阿狸和桃子的游戏 题解

    2563: 阿狸和桃子的游戏 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 970  Solved: 695[Submit][Status][Discu ...