一、Object类的介绍
-
Object 类:位于 java.lang 包中,是继承关系的根类、超类,是所有类的父类(直接的父类或是间接父类);
-
Object类型的引用可以用于存储任意类型的对象;
-
Object类中定义方法,所有类都可以直接使用。
二、Object类中常用方法:
-
getClass() : 返回引用中实际存储的对象类型。
开发实际应用:用于判断两个引用中实际存储的对象类型是否一致,
一致-true;不一致-false。
class Animal{} class Dog extends Animal{} class Cat extends Animal{} public class TestAnimal{ public static void main(String[] args){ Animal a1 = new Cat(); Animal a2 = new Dog(); System.out.println(a1.getClass() == a2.getClass()); } }
-
int hashCode() : 返回对象的整数哈希码值。对象的哈希码值来源是将 十
六进制的地址,转换十进制的整数的结果。
注意:由于不同的对象在堆空间中具有不同的地址,所有不同的对象
具有不同哈希码值。
-
String toString() : 返回该对象字符串的变现形式。
(1) 作用:方便展示对象的信息,子类通常将 toString方法覆盖
(2) toString方法覆盖的原则为:通常将所有的属性拼接为一个 字符串进
行结果返回。
public class TestStudent{ public static void main(String[] args){ Student s = new Student("liucy",18,99.0); System.out.println(s);// 默认调用toString方法 } } class Student{ private String name; private int age; private double score; public Student(){} public Student(String name,int age,double score){ this.name=name; this.age=age; this.score=score; } // get/set public String toString(){ return "name:"+name+",age:"+age+",score:"+score; } }
注意:get 方法和 toString 方法 区别:
a. get方法是返回对象的单个属性的信息,并且不会改变属性对应数据
类型
b. toString 方法获取所有属性的信息,并且将 所有属性拼接为 一个
String类型的结果进行返回。
-
boolean equals(Object o):用于比较对象内容是否相同。
== 的应用
(1) 如果 == 两端 为基本数据类型的变量,则判断变量中数值是否相同
如果==两端为引用,则判断引用中存储的地址是否相同。
(2)开发中实际应用:通常用于判断两个引用是否指向同一个对象。
表达式:引用名1 == 引用名2
a. 结果为 true,代表两个引用指向同一个对象;
b. 结果为false,代表两个引用指向不同的对象。
equals 方法的应用:
(1) 父类 Object类中 equals方法实现原理如下:
public boolean equals(Object obj) { return (this == obj); }
注意:父类中的equals方法是用于比较两个引用是否同一个对象,但是开发时,通常用equals方法比较对象的内容,所以父类中equals方法不足以满足子类的 需求,则需要覆盖父类Object中 equals方法。
(2) equals方法覆盖的原则:
public boolean equals(Object obj){ // 1. 自反性:判断当前对象和要比较的对象是否为同一个对象 : //this(当前对象) 和 obj(要比较对象) if(this == obj){ return true; } // 2. 判断 obj是否 空 if(obj == null){ return false; } // 3. 判断 两个引用中实际存储的对象类型是否一致 if(this.getClass() != obj.getClass()){ return false; } // 4. 强制类型转换: 为一一比较对象属性做准备 Student s = (Student)obj; // 5. 将对象中属性一一进行比较:基本数据类型的属性:== ; 引用类型:equals比较 if(this.age == s.age && this.score == s.score && this.name.equals(s.name)){ return true; }else{ return false; } }
面试重点: == 和 equals方法的区别。
(1) == 两端为基本数据类型,比较变量中数值是否相同
==两端为引用类型的变量,比较引用存储地址是否相同
(2) equals 方法:Object类中方法用于实现用(==)实现,比较对象地
址;但是实际开发时,需要将equals方法进行覆盖,用于比较对象
的内容是否相同。
-
finalize() : JVM 进行垃圾回收时,自动调用的方法。
(1) 垃圾对象:没有任何引用指向的对象。
Student s= new Student();
s = null ; // 将 s 指向的对象设置为 垃圾对象
(2) 垃圾回收器:用于JVM回收垃圾对象。简称为gc / GC
(3) 垃圾回收的目的:清除垃圾对象,释放空间,提高空间利用率。
(4)垃圾回收器回收垃圾对象时机:
a. 自动回收机制:当JVM内存耗尽时,不能再为新创建的对象分配空间时,JVM中垃圾回收器会自动将所有的垃圾对象一次性进行回收,垃圾回收器进行回收垃圾对象时,自动调用finalize方法。
b. 手动回收机制:利用 System.gc() ; 通知 垃圾回收器(GC)进行垃圾回收,如果 GC空闲,则进行垃圾回收,如果GC繁忙,则暂不回收
注意:开发时,finalize方法中不写任何重要代码,finalize方法的执行节点不可控。