1.1 简述
- 超类、基类,所有类的直接或间接父类,位于继承树的最顶层。
- 任何类,如没有书写extends显示继承某个类, 都默认直接继承0bject类,否则为间接继承。
- 0bject类中所定义的方法,是所有对象都具备的方法。
- 0bject类型可以存储任何对象。
- 作为参数,可接受任何对象。
- 作为返回值,可返回任何对象。
1.2 getClass()方法
public final Class<?> getClass() {}
返回引用中存储的实际对象类型。(.class字节码对象)
应用:
通常用于判断两个引用中实际存储对象类型是否一致。
public class Test {
@SuppressWarnings("rawtypes")
public static void main(String[] args) {
//创建Person对象
Person person1 = new Person();
Person person2 = new Person();
//获取Person的class对象
Class cl1 = person1.getClass();
Class cl2 = person2.getClass();
//打印一下
System.out.println(cl1);
//判断一下
System.out.println(cl1 == cl2);//true
}
}
//类中数据为空
class Person {
}
运行结果如下:
1.3 hashCode()方法
- public int hashCode() {}
- 返回该对象的十六进制的哈希码值。
- 哈希算法根据对象的地址或字符串或数字计算出来的int类型的数值。
- 哈希码并不唯一 ,可保证相同对象返回相同哈希码,尽量保证不同对象返回不同哈希码
public class Test {
public static void main(String[] args) {
//创建Person对象
Person person1 = new Person();
//在打印一下哈希值
System.out.println(person1.hashCode());
}
}
//类中数据为空
class Person {
}
运行结果如下:
1.4 toString方法
- public String toString() {}
- 返回该对象的字符串表示(表现形式)。
- 可以根据程序需求覆盖该方法,如:展示对象各个属性值。
public class Test {
public static void main(String[] args) {
//创建Person对象
Person person1 = new Person();
System.out.println(person1.toString());
System.out.println(person1);//默认调用toString方法
}
}
//类中数据为空
class Person {
}
运行结果如下:
1.5 equals方法
- public boolean equals(0bject obj) {}
- 默认实现为(this == obj),比较两个对象地址是否相同。
- 可进行覆盖,比较两个对象的内容是否相同。
public class Test {
public static void main(String[] args) {
//创建Person对象
Person person1 = new Person();
Person person2 = new Person();
//测试没重写的equals方法
System.out.println(person1.equals(person2));
}
}
//类中数据为空
class Person {
}
运行结果如下:
equals覆盖步骤:
- 比较两个引用是否指向同一个对象。
- 判断obi是否为null。
- 判断两个引用指向的实际对象类型是否一致。
- 强制类型转换。
- 依次比较各个属性值是否相同。
public class Test {
public static void main(String[] args) {
//创建两个对象
Person person1 = new Person(18);
Person person2 = new Person(18);
//测试重写的equals方法
System.out.println(person1.equals(person2));//true
System.out.println(person1.equals(null));//false
System.out.println(person1.equals(new Person(17)));//false
//toString方法
System.out.println(person1.toString());
System.out.println(person2);//默认调用toString方法
}
}
class Person {
int age;
public Person() {
}
public Person(int age) {
this.age = age;
}
public boolean equals(Object obj) {
if(this == obj){
return true;
}else if(null == obj) {
return false;
}else if(obj instanceof Person) {
if(((Person)obj).age == this.age) {
return true;
}else {
return false;
}
}
return false;
}
public String toString() {
return "Person [age=" + age + "]";
}
}
1.6 finalize()方法
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列(不是直接回收)
- 垃圾对象:没有有效引用指向此对象时,为垃圾对象。
- 垃圾回收: 由GC销毁垃圾对象,释放数据存储空间。
- 自动回收机制: JVM的内存耗尽,一次性回收所有垃圾对象。
- 手动回收机制:使用System. gc();通知JVM执行垃圾回收。