Objects是Java 7新增的一个工具类,它提供了一些工具方法来操作对象,这些工具方法大多是“空指针”安全的。

Objects实现的方法如下:

requireNonNull(T)与requireNonNull(T,String)在源码中定义如下:

public static <T> T requireNonNull(T obj) {if (obj == null)throw new NullPointerException();return obj;}
  public static <T> T requireNonNull(T obj, String message) {if (obj == null)throw new NullPointerException(message);return obj;}

在使用上面requireNonNull(T)方法时,当传入的参数不为null时,返回参数本身,反之,抛出一个NullPointerException异

常。而requireNonNull(T,String)方法的作用是,传入的参数不为null时,返回参数本身,否则抛出message的

NullPointerException异常。

接着我们来看看isNull(Object)方法与nonNull(Object)方法在源码中定义如下:

public static boolean isNull(Object obj) {return obj == null;}
 public static boolean nonNull(Object obj) {return obj != null;}

从上面的程序中可以看出isNull(Object)方法是判断传入的对象是否为null,为null返回true,否则false。nonNull(Object

obj)方法恰恰相反,判断传入的对象是否为null,为null返回false,否则返回true。

最后我们看下requireNonNull(T,Supplier<String>)方法:

 public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {if (obj == null)throw new NullPointerException(messageSupplier.get());return obj;}

在这里传入一个Supplier接口实现类的对象,Supplier接口定义如下:

public interface Supplier<T> {/*** Gets a result.** @return a result*/T get();
}

因此requireNonNull(T,Supplier<String>)方法与前面介绍的两个requireNonNull方法相似,当传入参数不为null,返回参

数本身,否则引发NullPointerException异常。

看下requireNonNull(T,Supplier<String>)方法如何使用:

class User {public String name;public int age;public User(String name,int age){this.name=name;this.age=age;}protected String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "name="+name+"\nage="+age;}}
public class Main {public User user1,user2;public static void main(String[] args) {new Main().init();}public void init(){User user1 = null;         User message=Objects.requireNonNull(user1, new Supplier<String>() {@Overridepublic String get() {return "user1这个对象为null";}});}
}

输出:

Exception in thread "main" java.lang.NullPointerException: user1这个对象为null
at java.util.Objects.requireNonNull(Objects.java:290)
at code2.Main.init(Main.java:50)
at code2.Main.main(Main.java:45)

很明显以上程序抛出NullPointerException异常,并输出Supplier接口实现的get方法。

转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/43940885   情绪控_

Java学习笔记21相关推荐

  1. java学习笔记21——JDBC

    文章目录 日报 11.11 JDBC 学习内容 JDBC JDBC 的核心 API DriverManager 类 Connection 接口 : Statement接口: PreparedState ...

  2. [JAVA学习笔记] 21天学习挑战赛之流程控制语句

    ​ 活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰.各位小伙伴,如果您: 想系统/深入学习某技术知识点- 一个人摸索学习很难坚持,想 ...

  3. Java学习笔记22:并发(2)

    Java学习笔记22:并发(2) 图源:PHP中文网 终止任务 终止线程有一种非常简单的方式:设置一个多线程共享的标记位,子线程用轮询的方式检查这个标记位,如果该标记位显示取消状态,就让子线程退出执行 ...

  4. java学习笔记十三

    11. 凡是继承了FilterOutputStream或FilterInputStream的类都是过滤流,也就是说他们不能直接跟目标(键盘,文件,网络等,节点流可以)数据打交道,只能包装 Intput ...

  5. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  6. Java学习笔记——流程控制

    Java学习笔记--流程控制 Day05 一.用户交互Scanner 1.Scanner对象 我们通过Java工具包java.util.Scanner中的Scanner类来获取用户的输入 基本语法:S ...

  7. Java学习笔记Day02

    Java学习笔记Day02 一.细化Hello程序 1.详解代码 //公有的类,叫做Hello public class Hello{//主方法public static void main(Stri ...

  8. 尚学堂Java学习笔记

    尚学堂Java学习笔记 ============================ J2SDK&JRE J2SDK:JAVA2 SOFTWARE DEVELOPMENT KIT JRE:JAVA ...

  9. 郑志远的java学习笔记

    郑志远的java学习笔记 郑志远    CCB 1         Java起源 略 2         Java语言概述 1.面向对象编程的3个原则:封装(encapsulation).继承(inh ...

最新文章

  1. Docker安装Nextcloud
  2. LeetCode Permutations(不重复数的所有排列)
  3. JAVA课程设计——“小羊吃蓝莓”小游戏
  4. 【Netty】反应器 Reactor 模式 ( 单反应器 Reactor 单线程 | 单反应器 Reactor 多线程 )
  5. MFC无边框对话框实现拖动
  6. Mac OS下使用VS Code对C++程序进行debug的配置
  7. Struts2项目搭建
  8. jquery给title标签赋值
  9. 树莓派c语言小车红外,基于树莓派的红外避障小车
  10. python中θ符号怎么打出来_Python打印特殊符号及对应编码解析
  11. matlab 贝塔系数,贝塔系数的三种计算方法.pdf
  12. codecademy里能学好php,在iPhone上学编程:Codecademy
  13. Andriod程序的结构
  14. win10文件名乱码但内容正常怎么办 win10文件名乱码怎么解决
  15. 为cocos2d-x 添加启动数字输入法的功能
  16. mysql 定时任务 每月15号执行
  17. http判断缓存是否有效,为什么有了last-modified还需要etag呢?
  18. Android客户端与PHP服务端API接口Token安全验证
  19. 关于云数据管理的复兴之路是怎样的?
  20. “优必选“杯2021中国机器人技能大赛--赛后总结

热门文章

  1. Ember.js如何与后端服务交互?adapter、store、ember data关系揭秘
  2. 数据仓库专题(2)-Kimball维度建模四步骤
  3. Ubuntu 12.10 下 详细Netbeans安装配置篇 (下)
  4. MASM6.1使用方法(适合初学者)
  5. 调试coffee script 的一个技巧
  6. Asp.Net 创建MetaWeblog API
  7. 学生课程表管理系统——stage 1
  8. Linux基础命令---sysctl修改内核参数
  9. @EnableScheduling和@Scheduled的使用(初级)
  10. WFP在包含fwpmu.h头的时候出错