大白糖奶兔的Blog
大白糖奶兔的Blog
Java学习-Day09Object类

Object类

  • 所有类的直接或间接超类,处在类层次最高点
  • 包含了所有Java类的公共属性

Object类的主要方法

  • public final Class getClass()获取当前对象所属的类信息,返回Class对象
  • public String toString()返回表示当前对象本身有关信息的字符串对象
  • public boolean equals(Object obj)比较两个对象的引用是否指向同一对象,是则返回true,否则返回false
  • protected Object clone()赋值当前对象,并返回这个副本
  • public int hashCode()返回该对象的哈希代码值
  • protected void finalize() throws Throwable在对象被回收时执行,通常完成的资源释放工作

相等和同一

  • 两个对象具有相同的类型,及相同的属性值,则称二者相等(equal)
  • 如果两个引用变量指向的是同一个对象,则称这两个引用变量同一(identical)
  • 两个对象同一,则肯定想等
  • 两个对象相等,不一定同一
  • 比较运算符“==”判断的是这连个对象是否同一
package 第三章类的重用;

import 第二章类和对象.BankAccount;

public class 判断对象同一 {
    public static void main(String[] args) {
        BankAccount a = new BankAccount("大白糖奶兔",123456,100.00f);
        BankAccount b = new BankAccount("大白糖奶兔",123456,100.00f);
        if (a==b){
            System.out.println("Yes");
        }else{
            System.out.println("No");
        }
    }
}

equals判断同一

package 第三章类的重用;

import 第二章类和对象.BankAccount;

public class 判断对象相等equals {
    public static void main(String[] args) {
        BankAccount a = new BankAccount("大白糖奶兔",123456,100.00f);
        BankAccount b = new BankAccount("大白糖奶兔",123456,100.00f);
        if (a.equals(b)){
            System.out.println("Yes");
        }else{
            System.out.println("No");//两个引用不是指向同一对象
        }
    }
}

方法2

package 第三章类的重用;

public class BankAccount {
public boolean equals(Object obj){
        if (obj instanceof BankAccount) return false;
        BankAccount b = (BankAccount) obj;
        return((this.getOwnerName().equals(b.getOwnerName())) && (this.getAccountNumber()==b.getAccountNumber()) &&
                (this.getBalance()==b.getBalance())
    }
}

hashCode()方法

hashCode是一个返回对象散列码的方法,该方法实现的一般规定是:

  • 在一个Java程序的一次执行过程中,如果对象“相等比较”所使用的信息没有被修改的话,同一对象执行hashCode方法每次都应返回同一整数。在不同的执行中,对象的hashCode方法返回值不必一致
  • 如果依照equals方法两个对象是相等的,则在这两个对象上调用hashCode方法应该返回同样的整数结果
  • 如果依照equals方法两个对象不相等,并不要求在这两个对象上调用hashCode方法返回值不同

只要实现的合理,Object类定义的hashCode方法为不同对象返回不同的整数,一个典型的实现是:将对象的内部地址转换为整数返回,但是Java语言并不要求必须这样实现

clone方法

  • 用于根据已存在的对象构造一个新的对象,也就是复制对象

覆盖clone方法:

  • 覆盖clone方法:在Object类中被定义为protected,所以需要覆盖为public
  • 实现Cloneable接口,赋予一个对象被克隆的能力cloneability class MyObject implements Cloneable

finalize方法

  • 在对象被垃圾回收器回收之前,系统自动调用对象的finalize方法
  • 要覆盖finalize方法,覆盖方法最后必须调用super.finalize

getClass方法

  • final方法,返回一个Class对象,用来代表对象的所属的类
  • 通过Class对象,可以查询类的各种信息:比如名字、超类、实现接口的名字等等
void PrintClassName(Object obj)
  System.out.println("The Object's Class is" + obj.getClass().getName());
}

notify、notifyAll、wait方法

  • final方法、不能覆盖!
  • 这三个方法主要用在多线程程序中

发表评论

textsms
account_circle
email

大白糖奶兔的Blog

Java学习-Day09Object类
Object类 所有类的直接或间接超类,处在类层次最高点包含了所有Java类的公共属性 Object类的主要方法 public final Class getClass()获取当前对象所属的类信息,返回Class对象pu…
扫描二维码继续阅读
2020-03-07
Title - Artist
0:00