关于程序null值的见解
今天遇到了一个问题,查询一条数据,返回用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值的见解的更多相关文章
- 请求接口获取到的数据其中出现null值,处理的时候导致了程序crash,解决方案如下:
第一种方法是使用分类给字典添加一个类方法,将字典中的null值全部替换为空字符串,代码如下: .h文件代码: @interface NSDictionary (DeleteNull) + (id)ch ...
- SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值
我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...
- null值与空值比较
JAVA中判断字符串或者数值是否为空时,常用到 .equals函数对空值进行判断 例如 values[5]为参数值 "".equals(values[5]) 常在if语句判断中 ...
- [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 网络请求的null值处理
最近项目中经常有遇到从服务器请求的数据是null的情况,这种情况下如果用[dic objectForKey:@"key"]方法,程序会发生崩溃现象,因为项目是以前的老项目,而且有太 ...
- [改善Java代码]equals应该考虑null值的情景
建议46: equals应该考虑null值情景 继续上一建议的问题,我们解决了覆写equals的自反性问题,是不是就很完美了呢?再把main方法重构一下: public class Client { ...
- [改善Java代码]提防包装类型的null值
建议26: 提防包装类型的null值 我们知道Java引入包装类型(Wrapper Types)是为了解决基本类型的实例化问题,以便让一个基本类型也能参与到面向对象的编程世界中.而在Java 5中泛型 ...
- [改善Java代码]别让null值和空值威胁到变长方法
建议5:别让null值和空值威胁到变长方法 public class Client { public void methodA(String str,Integer... is){ } public ...
- 查询反模式 - 正视NULL值
一.提出问题 不可避免地,我们都数据库总有一些字段是没有值的.不管是插入一个不完整的行,还是有些列可以合法地拥有一些无效值.SQL 支持一个特殊的空值,就是NULL. 在很多时候,NULL值导致我们的 ...
随机推荐
- 算法详解之最近公共祖先(LCA)
若图片出锅请转至here 概念 首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节 ...
- decimal.ToString()问题
decimal dt = 1.00M; decimal dt1 = 1M; bool d = dt == dt1; ...
- Js笛卡尔乘积
self.getDescartesSku = function (selSaleProp, i, nowLst, allALst) { if (selSaleProp.length = ...
- 借助URLOS快速安装Discuz论坛
### 简介 Discuz!是个可免费下载的PHP网络论坛程序,简称DZ,由戴志康所创立,当前最新版本是Discuz! X3.4.前身为Crossday Bulletin,最初改自XMBForum,尔 ...
- 并发编程-concurrent指南-阻塞队列-数组阻塞队列ArrayBlockingQueue
ArrayBlockingQueue类是实现了BlockingQueue. ArrayBlockingQueue是一个有界的阻塞队列,其内部实现是将对象放在一个数组中. 放入元素方法: (1) add ...
- Hyperledger Fabric 命令整理
Peer节点命令 Peer node start 启动一个Peer节点: peer node start status 获取当前节点的状态信息 peer node status reset 重置当前节 ...
- orm的操作
ORM的对应关系 类 —— > 表 对象 ——> 记录(数据行) 属性 ——> 字段 class Book(model.Model): title=models.Char ...
- 关于AndroidStudio在编译时无法解析和拉取依赖的问题和无法访问Jcenter服务器的问题
问题描述:在编译时出现如下错误:Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the....一般是被墙了.偶 ...
- Java学习笔记之---方法和数组
Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...
- Bzoj 2563: 阿狸和桃子的游戏 题解
2563: 阿狸和桃子的游戏 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 970 Solved: 695[Submit][Status][Discu ...