Object类
是Java中所有类的顶级父类(超类),任何一个类都直接或间接的继承Object,也就是说任何一个类的对象都可以赋值给一个Object对象(向上造型).
clone()(用protect修饰) 创建并返回此对象的一个副本
package cn.tedu.object; public class ObjectDemo1 implements Cloneable { int i; public static void main(String[] args) throws Throwable { ObjectDemo1 od1 = new ObjectDemo1(); od1.i = 10; // 一个类所产生的对象要想被克隆,那么这个类必须实现Cloneable接口 // Cloneable接口中没有任何的方法和属性,仅仅用作一个标志 // 产生了一个新对象,而新对象的属性值和原对象一样 ObjectDemo1 od2 = (ObjectDemo1) od1.clone(); System.out.println(od2.i); //调用哪个对象,只能在对应子类中用,p对象不在对应的Person类中,所以不能使用clone方法 // Person p = new Person(); // p.clone(); } } // class Person implements Cloneable { // }
finalize() 通知gc进行回收,不能直接调用gc,gc不一定启动
对象.finalize();
或者
System.gc();(该方法底层调用的是finalize方法)
getClass() 返回此Object的运行时类
Object o = "abc"; //获取对象的实际类型 System.out.println(o.getClass());
hashcode() 返回该对象的哈希码值
Object o = new Object(); //哈希码是根据哈希散列算法计算出来的 //哈希散列算法要求计算出来的值随机的散落在int的取值范围内 //存储对象时以对象的哈希码作为基准 System.out.println(o.hashCode());
toString() 返回该对象的字符串表示
System.out.println(o); System.out.println(o.toString()); // 当直接打印对象的时候,实际上底层默认调用对象的toString方法 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } //二进制Bin八进制Oct十进制Dec十六进制Hex // 如果重写了这个toString,那么按照重写之后的形式来返回
equals() 比较俩对象是否相等
public boolean equals(Object obj) { return (this == obj); }
重写equals()方法,比较包含具体属性的俩对象是否相等
package cn.jay.exer; public class Exer5 { public static void main(String[] args) { Student1 s=new Student1(); s.setName("xiao"); s.setAge(30); s.setId("管理01"); Student1 s1=new Student1(); s1.setName("xiao"); s1.setAge(30); s1.setId("管理01"); //System.out.println(s.getName()); //底层用==进行比较,==默认比较的是地址 System.out.println(s.equals(s1)); } } class Student1{ String name; int age; String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } @Override public boolean equals(Object obj) { //判断地址是否一致 if (this == obj) return true; //判断参数是否为空 if (obj == null) return false; //判断类型是否一致 if (getClass() != obj.getClass()) return false; //将obj强转为Student1类型,保持类型一致,然后比较两个对象的属性值 Student1 s = (Student1) obj; if (age != s.age) return false; //id是String类型,所以需要使用String中的equals比较 if (id == null) { if (s.id != null) return false; } else if (!id.equals(s.id)) return false; //name是String类型,所以需要使用String中的equals比较 if (name == null) { if (s.name != null) return false; } else if (!name.equals(s.name)) return false; return true; } }