java常用类:Object类
Object类
-
超类、基类,所有类的直接或间接父类,位于继承树的最顶层
-
任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承
-
Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类。
-
Object类中所定义的方法,是所有对象都具备的方法
-
Object类型可以存储任何对象:
作为参数,可以接受任何对象
作为返回值,可以返回任何对象
getClass()方法
-
public final Class<?> getClass(){} -
返回引用中存储的实际对象类型
-
应用:通常用于判断两个引用中实际存储对象类型是否一致
public class TestStudent {
public static void main(String[] args) {
Student s1=new Student("aaa",20);
Student s2=new Student("bbb",22);
//判断s1和s2是不是同一个类型
Class class1=s1.getClass();
Class class2=s2.getClass();
if(class1==class2){
System.out.println("s1和s2属于同一个类型");
}else
System.out.println("s1和s2不属于同一个类型");
}
}
//结果
//s1和s2属于同一个类型
hashCode()方法
public int hashCode(){}- 返回该对象的哈希码值,是一个整数,表示在哈希表中的位置
- 哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值
- 一般情况下相同对象返回相同哈希码
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
Student s3=s1;
System.out.println(s3.hashCode());
//结果
//460141958
//1163157884
//460141958 s3与s1内存一样,所以哈希码值一样
toString()方法
public String toString(){}- 返回该对象的字符串表示(表现形式)
- 默认返回格式:对象的 class 名称 + @ + hashCode 的十六进制字符串
- 可以根据程序需求覆盖该方法,如:展示对象各个属性值
//toString()
System.out.println(s1.toString());
System.out.println(s2.toString());
//结果
//com.wu.Object.Student@1b6d3586
//com.wu.Object.Student@4554617c
//重写toString()方法
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
//结果
//Student{name='aaa', age=20}
//Student{name='bbb', age=22}
equals()方法
public boolean equals(Object obj){}- 默认实现为( this==obj ),是判断两个对象引用指向的是同一个对象,即比较两个对象地址是否相同
- 可进行覆盖,比较两个对象的内容是否相同;
- 如果子类重写了 equals() 方法,就需要重写 hashCode() 方法,比如 String 类就重写了 equals() 方法,同时也重写了 hashCode() 方法
class RunoobTest {
public static void main(String[] args) {
// Object 类使用 equals() 方法
// 创建两个对象
Object obj1 = new Object();
Object obj2 = new Object();
// 判断 obj1 与 obj2 是否相等
// 不同对象,内存地址不同,不相等,返回 false
System.out.println(obj1.equals(obj2)); // false
// obj1 赋值给 obj3
// String 重写了 equals() 方法
// 对象引用,内存地址相同,相等,返回 true
Object obj3 = obj1;
System.out.println(obj1.equals(obj3)); // true
}
}
//结果
//false
//true
equals()方法覆盖步骤
- 比较两个引用是否指向同一个对象
- 判断obj是否为null
- 判断两个引用指向的实际对象类型是否一致
- 强制类型转换
- 依次比较各个属性值是否相同
此处先简单了解下:
当equals()方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规约定:值相同的对象必须有相同的hashCode。
object1.equals(object2)为true,hashCode也相同;
hashCode不同时,object1.equals(object2)为false;
hashCode相同时,object1.equals(object2)不一定为true;
//重写equals()方法
@Override
public boolean equals(Object o) {
//判断两个对象是否是同一个引用
if (this == o)
return true;
//判断o是否null;判断是否是同一个类型,也可以用instanceof判断
if (o == null || getClass() != o.getClass())
return false;
//强制类型转换
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
//重写hashCode()方法
//@Override
//public int hashCode() {
// return Objects.hash(name, age);
// }
finalize()方法
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列
- 垃圾对象:没有有效引用指向此对象时,为垃圾对象
- 垃圾回收:由GC销毁垃圾对象,释放数据存储空间
- 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
- 手动回收机制:使用
System.gc();通知JVM执行垃圾回收
//重写finalize()方法
@Override
protected void finalize() throws Throwable {
System.out.println(this.name+"对象被回收了");
}
//测试
Student s1=new Student("aaa",20);
Student s2=new Student("bbb",20);
new Student("ccc",20);
new Student("ddd",20);
//回收垃圾
System.gc();
System.out.println("回收垃圾");
//结果:
//回收垃圾
//ddd对象被回收了
//ccc对象被回收了

浙公网安备 33010602011771号