5 Objects类
5.1 概述
tips:了解内容
查看API文档,我们可以看到API文档中关于Objects类的定义如下:
Objects类所在包是在java.util包下,因此在使用的时候需要进行导包。并且Objects类是被final修饰的,因此该类不能被继承。
Objects类提供了一些对象常见操作的方法。比如判断对象是否相等,判断对象是否为null等等。
接下来我们来查看一下API文档,看一下Objects类中的成员,如下所示:
我们可以发现Objects类中无无参构造方法,因此我们不能使用new关键字去创建Objects的对象。同时我们可以发现Objects类中所提供的方法都是静态的。因此我们可以通过类名直接去调用这些方法。
5.2 常见方法
tips:重点讲解内容
常见方法介绍
我们要重点学习的Objects类中的常见方法如下所示:
public static String toString(Object o) // 获取对象的字符串表现形式 public static boolean equals(Object a, Object b) // 比较两个对象是否相等 public static boolean isNull(Object obj) // 判断对象是否为null public static boolean nonNull(Object obj) // 判断对象是否不为null
我们要了解的Objects类中的常见方法如下所示:
public static <T> T requireNonNull(T obj) // 检查对象是否不为null,如果为null直接抛出异常;如果不是null返回该对象; public static <T> T requireNonNullElse(T obj, T defaultObj) // 检查对象是否不为null,如果不为null,返回该对象;如果为null返回defaultObj值 public static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier) // 检查对象是否不为null,如果不为null,返回该对象;如果 // 为null,返回由Supplier所提供的值
上述方法中的T可以理解为是Object类型。
案例演示
接下来我们就来通过一些案例演示一下Objects类中的这些方法特点。
案例1:演示重点学习方法
实现步骤:
- 创建一个学生类,提供两个成员变量(name , age);并且提供对应的无参构造方法和有参构造方法以及get/set方法,并且重写toString方法和equals方法
- 创建一个测试类(ObjectsDemo01), 在该类中编写测试代码
如下所示:
Student类
public class Student { private String name ; // 姓名 private String age ; // 年龄 // 其他代码略 ... }
ObjectsDemo01测试类
public class ObjectsDemo01 { public static void main(String[] args) { // 调用方法 method_04() ; } // 测试nonNull方法 public static void method_04() { // 创建一个学生对象 Student s1 = new Student("itheima" , "14") ; // 调用Objects类中的nonNull方法 boolean result = Objects.nonNull(s1); // 输出结果 System.out.println(result); } // 测试isNull方法 public static void method_03() { // 创建一个学生对象 Student s1 = new Student("itheima" , "14") ; // 调用Objects类中的isNull方法 boolean result = Objects.isNull(s1); // 输出结果 System.out.println(result); } // 测试equals方法 public static void method_02() { // 创建两个学生对象 Student s1 = new Student("itheima" , "14") ; Student s2 = new Student("itheima" , "14") ; // 调用Objects类中的equals方法,比较两个对象是否相等 boolean result = Objects.equals(s1, s2); // 如果Student没有重写Object类中的equals方法,此处比较的还是对象的地址值 // 输出结果 System.out.println(result); } // 测试toString方法 public static void method_01() { // 创建一个学生对象 Student s1 = new Student("itheima" , "14") ; // 调用Objects中的toString方法,获取s1对象的字符串表现形式 String result = Objects.toString(s1); // 如果Student没有重写Object类中的toString方法,此处还是返回的对象的地址值 // 输出结果 System.out.println(result); } }
案例2:演示需要了解的方法
public class ObjectsDemo02 { public static void main(String[] args) { // 调用方法 method_03(); } // 演示requireNonNullElseGet public static void method_03() { // 创建一个学生对象 Student s1 = new Student("itheima" , "14") ; // 调用Objects对象的requireNonNullElseGet方法,该方法的第二个参数是Supplier类型的,查看源码我们发现Supplier是一个函数式接口, // 那么我们就可以为其传递一个Lambda表达式,而在Supplier接口中所定义的方法是无参有返回值的方法,因此具体调用所传入的Lambda表达式如下所示 Student student = Objects.requireNonNullElseGet(s1, () -> { return new Student("itcast", "14"); }); // 输出 System.out.println(student); } // 演示requireNonNullElse public static void method_02() { // 创建一个学生对象 Student s1 = new Student("itheima" , "14") ; // 调用Objects对象的requireNonNullElse方法 Student student = Objects.requireNonNullElse(s1, new Student("itcast", "14")); // 输出 System.out.println(student); } // 演示requireNonNull public static void method_01() { // 创建一个学生对象 Student s1 = new Student("itheima" , "14") ; // 调用Objects对象的requireNonNull方法 Student student = Objects.requireNonNull(s1); // 输出 System.out.println(student); } }