一.Object类的概述
- Object类的概述:类 Object 是类层次结构的根类
每个类都使用 Object 作为超类(父类).所有对象(包括数组)都实现这个类的方法
二.Object类常见的成员方法
hashCode()
public int hashCode()
:返回的是该对象的哈希码值,哈希码值是通过哈希表(Hashtable)里面的哈希算法算出来的,可以理解为逻辑地址值(整数)- 举例:
//创建一个学生类
class Student{
}
//测试类
public class Demo1 {
public static void main(String[] args){
//创建学生类的对象
Student s1 = new Student();
Student s2 = new Student();
//把第一个对象赋值给第三个对象
Student s3 = s1;
//使用hashCode()方法
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s3.hashCode());
}
}
结果:
366712642
1829164700
366712642
getClass()
public final Class getClass()
:返回此 Object 的运行时类
可以通过Class类中的一个方法,获取对象的真实类的全名称public String getName()
- 举例:
//创建一个学生类
class Student{
}
//测试类
public class Demo1 {
public static void main(String[] args){
//创建学生类的对象
Student s = new Student();
Class c = s.getClass();
//返回该对象的运行时类
System.out.println(c);
//获取对象的真实类的全名称
String a = c.getName();
System.out.println(a);
}
}
结果:
class Object类.Student
Object类.Student
toString()
public String toString()
:返回该对象的字符串表示,它的值等于:getClass().getName() +@ + Integer.toHexString(hashCode())
Integer.toHexString(hashCode()
:返回一个整数的16进制数据
默认情况下,该方法返回值我们来说没有意义,一般重写该方法.- 举例:
//创建一个学生类
class Student{
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
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;
}
//重写toString()方法
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
//测试类
public class Demo1 {
public static void main(String[] args){
//创建学生类的对象
Student s = new Student("王一",20);
System.out.println(s.toString());
}
}
结果:
Student [name=王一, age=20]
equals(Object obj)
public boolean equals(Object obj)
:判断其他某个对象是否与此对象相等(默认比较地址值),由于比较对象的引用没有意义,一般建议重写该方法.- 举例:
//创建一个学生类
class Student{
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
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;
}
//重写equals()方法
public boolean equals(Object obj) {
//this:Student当前类对象
if (this == obj)
return true;
///如果obj对象是空对象,Student类具体对和空对象比较,没有意义
if (obj == null)
return false;
////getClass().equals(obj.getClass)
if (!(obj instanceof Student))
return false;
//将父类引用强制转换子类对象
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
//测试类
public class Demo1 {
public static void main(String[] args){
//创建学生类的对象
Student s1 = new Student("王一",20);
Student s2 = new Student("王二",20);
Student s3 = new Student("王一",20);
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
}
}
结果:
false
true
obj instanceof Student:该obj的对象是否是Student类的实例化
finalize()
protected void finalize()
:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法(主要针对堆内存)
clone()
protected Object clone()
:创建并返回此对象的一个副本- 自定义类实现克隆步骤:
- 自定义类实现Cloneable接口
- 自定义类中重写Object类的clone()方法
- 重写clone()方法时通过super.clone()调用Object类的clone()方法来得到该对象的副本,并返回该副本
- 举例:
//创建一个学生类
class Student implements Cloneable{
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
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;
}
//重写了clone,但前提是该类必须实现Cloneable接口!
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
//测试类
public class Demo1 {
public static void main(String[] args) throws CloneNotSupportedException{
//创建学生类的对象
Student s1 = new Student("王一",20);
Object o = s1.clone();
//将父类的引用强制转换成子类对象
Student s2 = (Student) o;
System.out.println(s2.getName()+","+s2.getAge());
}
}
结果:
王一,20