JavaSE -常用类-Object类(十二)

一、Object类的介绍
  1. Object 类:位于 java.lang 包中,是继承关系的根类、超类,是所有类的父类(直接的父类或是间接父类);

  2. Object类型的引用可以用于存储任意类型的对象;

  3. Object类中定义方法,所有类都可以直接使用。

二、Object类中常用方法:
  1. 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());
        }
    }
  2. int hashCode() : 返回对象的整数哈希码值。对象的哈希码值来源是将 十

    ​ 六进制的地址,转换十进制的整数的结果。

    注意:由于不同的对象在堆空间中具有不同的地址,所有不同的对象

    ​ 具有不同哈希码值。

  3. 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类型的结果进行返回。

  4. 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方法进行覆盖,用于比较对象

    ​ 的内容是否相同。

  5. 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方法的执行节点不可控。

猜你喜欢

转载自blog.csdn.net/Java_lover_zpark/article/details/105259729