常用类之Object类以及Object类的常用方法

Object

  • 祖宗类,最大父类

  • 所有类都直接或者间接的继承自Object

  • 该类中存放着所有对象都应该拥有的方法,可以根据需求对部分方法提供重写

常用方法

  1. Class getClass():获取引用的实际对象类型

    ​
    import com.bz.entity.Person;
    import com.bz.entity.Student;
    import com.bz.entity.Teacher;
    ​
    public class Test {
        public static void main(String[] args) {
            //利用多态创建学生对象
            Person p = new Student();
            //利用多态创建一个老师对象
            Person p2 = new Teacher();
    ​
            Student stu = new Student();
            //获取实际对象类型
            System.out.println(p.getClass());
            //判断p和p2的实际对象类型是否相同
            System.out.println(p.getClass() == p2.getClass());//f
            System.out.println(p.getClass() == stu.getClass());//t
    ​
        }
    }
  2. int hashCode():用来获取对象的哈希码值

    • 重写原因:该方法默认根据对象堆地址获取哈希码值,但是在某些需求场景下,我们需要关注的是对象内容,内容相同则哈希码值相同,所以需要重写

    • 方法签名:public int hashCode()

    • 重写规则:

      • 整数类型:直接相加(long类型需要强转为int)

      • double类型:强转为int后相加

      • 类库中的引用类型(如String):调用属性名.hashCode()相加

      • 自定义引用类型:也重写其hashCode方法,然后调用属性名.hashCode()相加

    ​
    public class Student extends Person{
        private String name;
        private int age;
        private double score;
        //老师对象属性
        private Teacher tea;
    ​
        //重写hashCode
        public int hashCode(){
            return age+name.hashCode()+(int)score+tea.hashCode();
        }
    ​
        //省略getter、setter、构造
    ​
    }
    ​
    public class Teacher extends Person{
        private String name;
        private String className;
    ​
        //重写hashCode
        public int hashCode(){
            return name.hashCode() + className.hashCode();
        }
        //省略getter、setter、构造
       
    }
  3. boolean equals(Object):判断当前对象与参数对象是否相同

    • 重写原因:该方法默认比较双方堆地址,但是在某些需求场景下,需要比较双方内容,所以需要重写

    • 方法签名:public boolean equals(Object o)

    • 重写规则:

      //重写equals方法:用this当前对象和参数o进行比较
          public boolean equals(Object o){
              //自反性
              if (this == o) {
                  return true;//自己和自己比,一定相同
              }
              //空值判断
              if (o == null) {
                  return false;//与null值比,一定不同
              }
              //类型比较
              if (this.getClass() != o.getClass()) {
                  return false;//实际对象类型不同,一定不同
              }
              //类型强转:将参数Object类型强转为当前类型
              Student stu=(Student) o;
              //属性值比较
              if (this.name.equals(stu.name) && this.age==stu.age && this.score==stu.score){
                  return true;
              }
              return false;        
          }

      ==:基本类型比较值,引用类型比较地址

      引用类型比较值:调用equals方法

      • 如果为自定义引用类型,则也需要重写equals才能比较值

  4. String toString():获取对象的详细信息

    • 特点:直接使用引用名时会默认调用

    • 重写原因:该方法默认获取对象地址,但是实际开发中,获取对象具体属性信息更常用,所以需要重写

    • 方法签名:public String toString()

    • 重写规则:根据需求拼接字符串返回即可

    public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", score=" + score +
                    ", tea=" + tea +
                    '}';
        }
  5. void finalize():用来进行垃圾回收

    • 垃圾回收机制:当内存满到不足以支撑新对象的创建时,虚拟机会自动调用垃圾对象的finalize方法对其进行回收销毁,以释放空间

    • 垃圾对象的判断标准:无任何引用指向的对象(零引用机制)

    • 手动垃圾回收:借助垃圾回收器(GC),在代码中调用System.gc()完成手动垃圾回收

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值