基础系列【七】--Object

基础系列【七】--Object

Object

1. java.lang.Object:所有的类都直接或者间接继承了Object类,任何对象都可以用Object类对象来接收,java中所有类的顶级父类,Object类是唯一一个没有父类的类。 所有的对象(数组)都实现类Object类的方法。
2. 重要方法:
    1. protected Object clone()--理解;
    2. protected  void finalize()--理解:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 
    3. public int hashCode() 返回该对象的哈希码值。 
    4. public String toString() 返回该对象的字符串表示--掌握。
    5. public boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”--重点。
    6. Class<?> getClass()--掌握 返回此 Object 的运行时类。
    7. public void wait()--掌握: 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
    8. public void notify()--掌握: 唤醒在此对象监视器上等待的单个线程。

代码分析

protected Object clone()--理解;
//protected  Object clone() 创建并返回此对象的一个副本。 
//clone--克隆--一个对象要想被克隆,必须实现Cloneable接口
public class ObjectDemo01 implements Cloneable {
//public interface Cloneable {};该接口没有任何方法和属性,仅仅标志该对象可以被克隆
int i ;
public static void main(String[] args) throws CloneNotSupportedException {
    ObjectDemo01 ob1 = new ObjectDemo01();
    ob1.i = 5;
    // 克隆ob1对象
    ObjectDemo01 ob2 = (ObjectDemo01) ob1.clone();
    //克隆完成后ob2中的属性和ob1相同
    System.out.println(ob2.i);
    //克隆出来的对象是否和元对象相同?
    //验证:改变ob2中i的值,看ob1中该值是否变化?或者打印地址是否相同?
    System.out.println(ob1==ob1);
    //protected修饰词:本类中,子类中,同包类中使用。但子类中使用和子类对象使用是一回事吗?
}
Class<?> getClass() 返回此 Object 的运行时类。 
public int hashCode() 返回该对象的哈希码值。 

public class ObjectDemo2 {
public static void main(String[] args) {
    //声明了一个o对象,实际上是一个String类型
    Object o = "abc";
    //获取o的运行时类型--实际类型
    System.out.println(o.getClass());
    //hashcode--哈希码--本质上是一串二进制数据,底层通过哈希算法算出来的
    //散列--不连续的值--哈希码的取值范围和int取值范如果,不超过围一致--大约43亿个取值
    //根据哈希算法算出来的哈希值会随机散列分布在这43一个取值范围中。
    //在一个程序中,在同一条件下,同一对象的值计算的哈希码是一样的,不同对象的哈希值不一样。
    //条件:比如计算机的内存使用,cpu的用率。每时每刻都不同,所以,同一对象的哈希码,在不同时刻的哈希值不一样。 
    //人为的人为哈希码是唯一的--所以往往会利用对象的哈希码作为地址是唯一的。
    //默认情况对象的地址就是该对象哈希值16进制。
    Object obj = new Object();
    System.out.println(o.hashCode());
    System.out.println(o.hashCode());
    System.out.println(o.hashCode());
    System.out.println(o.hashCode());

    System.out.println(obj);//java.lang.Object@37748ba4
    System.out.println(Integer.toHexString(obj.hashCode()));//37748ba4

    System.out.println(obj.hashCode());
    System.out.println(obj.hashCode());
    System.out.println(obj.hashCode());
    System.out.println(obj.hashCode());

    //String toString() 返回该对象的字符串表示。
    //当我们直接打印一个对象时,底层是调用对象的toString方法
    //bin--二进制  Oct--8进制 dec--十进制 Hex--16进制
    /*
     * 默认情况下toString()方法
     * public String toString() 
     *      { return getClass().getName() + "@" +
     *          Integer.toHexString(hashCode()); }
     * 一般在开发中,我们会重写toString()方法,方便调试。
     */
    System.out.println(obj);
    System.out.println(obj.toString());
    }   
    }
/*比较两个对象是否相同
boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。 默认底层是按照对象的地址是否相等。
实际开发中我们一般要重写equals()方法。
public boolean equals(Object obj){
    return (this == obj);
}*/
public boolean equals(Object obj){
    //先判断俩对象的地址是否一样
    if(this == obj){
        return true;
    }
    //判断对象参数是否为空
    if(obj==null){
        return false;
    }
    //判断俩对象的类型是否相同
    if(this.getClass()!=obj.getClass()){
        return false;
    }
    //判断属性是否相等(根据实际要求填写)
    //注意引用类型的判断,防止出现空指针的情况。
    //this.name==p.name,判断两者是否为null
    //this.name!=null&&this.name.equals(p.name),防止一个为空一个不为空
    Person p = (Person)obj;
    if(this.name==p.name||this.name!=null&&this.name.equals(p.name)){
        return true;
    }
    return false;

}

下一篇:
基础系列【八】–包装类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值