网站首页 > 精选教程 正文
在4.2.1 节中,我们已经了解到,对象变量包含一个对象的引用,或者包含一个特殊值null ,后者表示没有引用任何对象。
听上去这是一种处理特殊情况的便捷机制,如未知的名字或雇佣日期。不过使用null 值时要非常小心。
如果对null 值应用一个方法,会产生一个 NullPointerException 异常。
LocalDate rightNow = null;
String s = rightNow.toString();
这是一个很严重的错误,类似于“索引越界”异常。如果你的程序没有“捕获”异常,那么程序就会终止。正常情况下,程序并不捕获这些异常,而是依赖于程序员从一开始就不要带来异常。
提示: 程序因 NullPointerException 异常终止时,栈轨迹会显示问题出现在哪一行代码中。从Java 17 开始,错误消息会包含有 null值的变量或方法名。例如,在以下调用中:
String e = e.getHireDay().toString();
错误消息会告诉你e 是否为null 或 e.getHireDay是否返回null。
定义一个类时,最好清楚地知道哪些字段可能为null。在我们的例子中,我们不希望 name 或 hireDay 字段为null。(不用担心 salary,它是基本类型,不可能为null)
hireDay 字段肯定是非null的,因为它初始化为一个新的 LocalDate对象。但是,name 可能为null,如果调用构造器时为 n 提供的实参是 null,name就会是 null。
对此有两种解决方法。“宽容”方法是把null参数转换为一个适当的非 null :
if(n == null)
name = "unknown";
else
name = n;
Objects 提供了一个便利方法
name = Objects.requireNonNullElse(n , "unknown");
"严格"方法则干脆拒绝 null 参数
name = Objects.requireNonNullElse(n , "unknown");
name = Objects.requireNonNull(n , "The name cannot be null");
如果用null 名字构造一个 Employee 对象,就会产生NullPointerException 异常。乍看上去这种补救方法好像不太有用,不过这种方法有两个好处:
1. 异常报告会提供这个问题的描述
2.异常报告会准确地指出问题所在的位置,否则 NullPointerException异常会出现在其他地方,而很难追踪到真正导致问题的构造器参数。
注释:如果要接受一个对象引用作为构造参数,就要问问自己:是不是真的希望接受可有可无的值。如果不是,那么“严格”方法更合适。
猜你喜欢
- 2024-11-28 java 核心技术-12版 卷Ⅰ- 5.2.3相等测试与继承
- 2024-11-28 java 核心技术-12版 卷Ⅰ- 5.2.4 hashCode方法
- 2024-11-28 Java入门书单
- 2024-11-28 java 核心技术-12版 卷Ⅰ- 4.3.7 隐式参数与显式参数
- 2024-11-28 全网最完整的免费java教程讲义系列(四)——java的流程控制
- 2024-11-28 java 核心技术-12版 卷Ⅰ- 4.6 对象构造 4.6.1重载
- 2024-11-28 java 核心技术-12版 卷Ⅰ- 3.10 数组
- 2024-11-28 java 核心技术-12版 卷Ⅰ- 4.3 自定义类
- 2024-11-28 2019年Java核心技术我整理了200多页pdf,今天分享给你
- 2024-11-28 java 核心技术12版卷1 - 1.3 Java applet 与 Internet
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)