关于程序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值导致我们的 ...
随机推荐
- Google浏览器插件之闪存过滤器
一件很有意思的事情引发的无聊尝试. 博客园有个很有趣的功能,就是闪存,翻阅到07年园长对闪存的定义: 记录一闪而过的想法,高兴或者不高兴都可以发一下.我用这个一直以来的想法就是,想到点啥发点 ...
- kuberbetes基础概念
部署了一大堆,来了解一下K8S一些基本的概念. 1.Node Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod.Node上运行着Kubern ...
- 曹工说Tomcat4:利用 Digester 手撸一个轻量的 Spring IOC容器
一.前言 一共8个类,撸一个IOC容器.当然,我们是很轻量级的,但能够满足基本需求.想想典型的 Spring 项目,是不是就是各种Service/DAO/Controller,大家互相注入,就组装成了 ...
- 使用SpringSecurity搭建授权认证服务(1) -- 基本demo认证原理
使用SpringSecurity搭建授权认证服务(1) -- 基本demo 登录认证是做后台开发的最基本的能力,初学就知道一个interceptor或者filter拦截所有请求,然后判断参数是否合理, ...
- CDH 5.15.2 离线安装
一.前置准备 1. 基础信息 1.1 机器 机器名 服务 hadoop1 主节点 hadoop2 data.task hadoop3 data.task 1.2 服务版本 服务 版本 cdh 5.15 ...
- POJ 2987:Firing(最大权闭合图)
http://poj.org/problem?id=2987 题意:有公司要裁员,每裁一个人可以得到收益(有正有负),而且如果裁掉的这个人有党羽的话,必须将这个人的所有党羽都裁除,问最少的裁员人数是多 ...
- kubeadm安装k8s
软件版本: kubelet:V1.13.3 docker: 18.06.1 实验环境: Centos 7.5.1804 说明: 初学.安装步骤参考了阿良的文档,并做了部分修改. 步骤如下: 1.关闭防 ...
- git分支创建与切换
1. 场景描述 新版本迭代上线完成,为了保持当前版本稳定性及可回退等需求,需要切换新的分支用于下一版本的迭代开发. 2. 解决方案 2.1 切换前工作. 因发布上线当天有可能存在临时更改文件而未上传g ...
- 用Python玩数据-笔记整理-第一章-练习与测试
编程题: 简单的输入输出:编程实现输入姓.名的提示语并接受用户输入,并单独显示姓.名和全名,执行效果如下所示: Input your surname:ZHANG Input your firstnam ...
- spark 源码分析之十六 -- Spark内存存储剖析
上篇spark 源码分析之十五 -- Spark内存管理剖析 讲解了Spark的内存管理机制,主要是MemoryManager的内容.跟Spark的内存管理机制最密切相关的就是内存存储,本篇文章主要介 ...