1.Object
1.说明:
Object类是所有类,数组,枚举类的父类,java允许把任何类型的对象赋给Object类型的变量。当定义一个类时没有使用extends为它显式指定父类,则该类默认继承Object父类
2.Object类的常用方法:
1.boolean equals(Object obj): 判断该类与该对象是否是同一个对象
2.protected void finalize():当系统中没有引用变量到该对象时,清理资源
3.Class<?>getClass():返回该对象运行时的类
4.int hashCode():返回该对象的hashCode值
5.Strint toString():返回该对象的字符串显示,用于返回表述该对象信息的字符串对象
3.如何实现对象的自我克隆?(clone())
3-1:该方法的效率是copy的两倍以上,但是为浅拷贝(只会拷贝对象内部的值,而不会拷贝对象本身)
3-2:步骤:
*自定义实现Cloneable接口(标记接口)
*自定义类实现clone()方法
*返回super.clone
举个栗子:
public class Address {
String detail;
public Address(String detail){
this.detail=detail;
}
}
public class User implements Cloneable{
int age;
Address address;
public User(int age){
this.age=age;
address=new Address("my address");
}
public User clone() throws CloneNotSupportedException {
return (User) super.clone();
}
}
class UserTest{
public static void main(String[]args) throws CloneNotSupportedException {
User u1=new User(20);
User u2=u1.clone();
System.out.println(u1==u2);
System.out.println(u1.address==u2.address);
}
}
/**
输出结果:false(浅拷贝) true(数值相同)
*/
objects工具类
1.用途:
提供工具方法来操作对象,这些方法可以防止空指针,实现“空指针安全”
举个栗子
import java.util.Objects;
public class ObjectUtils {
static ObjectUtils obj;
public static void main(String[]args){
//返回hashCode
System.out.println(Objects.hashCode(obj));
/**
如果对象为null,返回null(不会产生空指针异常)
*/
System.out.println(Objects.toString(obj));
/**
对方法的形参进行校验
* 传入参数不为null,返回参数本身(不会产生空指针异常 自动报错)
* */
System.out.println(Objects.requireNonNull(obj,"obj参数不能为空"));
}
}