nullpointerexception
汉诺塔问题的描述如下:有3根柱子A、B和C,在A上从下往上按照从小到大的顺序放着64个圆盘,以B为中介,把盘子全部移动到C上。移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子。本实例实现了3阶汉诺塔问题的求解,实例运行效果如图 为了将第N个盘子从A移动到C,需要先将第N个盘子上面的N-1个盘子移动到B上,这样才能将第N个盘子移动到C上
这看上去好像是一个多余的操作 因为如果我们试图去调用一个空对象的方法 也会抛出 NullPointerException 运行时异常 那么我们为什么要多此一举进行这样的一次检查呢? 这一问题在 StackOverflow 上有人进行了解答 Why should one use Objects.requireNonNull? 看了他们的回答 总结为以下几点: 首先 从这个方法的名称可以看出 这个方法使用的场景是 我们使用一个对象的方法时 正常的运行状态应该能保证这个对象的引用非空 如果这个对象为空了 那一定是其他某个地方出错了 所以我们应该抛出一个异常 我们不应该在这里处理这个非空异常. 其次 这里涉及到一个很重要的编程思想 就是 Fail-fast 思想 翻译过来就是 让错误尽可能早的出现 不要等到我们很多工作执行到一半之后才抛出异常 这样很可能使得一部分变量处于异常状态 出现更多的错误. 这也是 requireNonNull 这个方法的设计思想 让错误尽早出现. 使用这个方法 我们明确的抛出异常 发生错误时 我们立刻抛出异常. 除此之外 这个方法的作用也是一个明确和不明确的区别 使用这个方法表示我们明确进行了这个判断 其实与我们自己使用 if-else 进行判断是一样的 只是这个工具类简化了这样的操作 让我们的代码看上去更加简洁 可读性更强.