Java.lang包——Object类

Java.lang 包—— Object

作者: zccst

 

Object 类是 Java 中所有类的基类或根类,所有 class 的对象(包括数组对象)都继承了 Object 的方法;

Object 类有 1 个构造方法和 11 个成员方法,其中最常用的是:

1.       public Boolean equals(Object obj);  // 用来比较两个对象是不是相等

2.       public String toString();           // 常常被重写以输出一个有意义的字符串

 

object 类——构造方法及常用方法

public boolean equals(Object obj)  比较当前对象与 obj 是否为同一对象,返回值: ture/false

public String toString()           返回当前对象本身的有关信息,按字符串对象(表达形式)返回

public native int hashCode()      返回对象的 Hash 码值。 Hash 码是标志对象的唯一值, Hash 码相同的对象是同一对象

protected Object clone()         创建并返回此对象的一个副本。

public final Class getClass()      获取当前对象所属的类信息,返回此 Object 的运行时类。

protected void finalize()throws Throwable  当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

 

 

以下三个函数用于控制线程

public final native void notify()        唤醒在此对象监视器上等待的单个线程。

public final native void notifyAll()     唤醒在此对象监视器上等待的所有线程。

public final native void wait()          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。

public final native void wait(long timeout) ;在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。

public final native void wait(long timeout, int nanos) ;在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。

注: native 型方法指由 C++ 语言编写的方法, Java 解释器对其进行转义后才执行。

 

 

重点讲解的方法

1 equals() :对象内容的比较

比较对象时,一般用 equal() 方法。实际上还是比较对象地址是否相同。

Object 类方法定义: public boolean equals(Object obj){ return (this == obj);}

   1). 自反性: s.equals(s)  true

   2). 对称性: s1.equals(s2) true

                   s2.equals(s1) true

   3). 传递性: s1.equals(s2) true

                   s2.equals(s3) true

                   s1.equals(s3) true

== ”与 equals()

两个对象具有相同的类型,及相同的属性值,则称二者相等 (equal)

如果两个引用变量指向的是同一个对象,则称这两个变量 ( 对象 ) 同一 (identical) "==" 一般用于基本数据类型比较。若用作两个引用对象比较,仅当引用变量引用同一个对象时,才返回 true, 否则 false 。)

所以,两个对象同一,则肯定相等;两个对象相等,不一定同一。等号“ == 判断的是这两个对象是否同一。

注:弄清楚这个问题前提是必须已经准确深刻理解 C++ 中引用和 new 运算符对内存地址操作及区别。

例如:

  void EqualCompare()

{

String s1 = new String("Hello");

String s2 = new String("Hello");

String s3 = "Hello";

String s4 = "Hello";

 

// 未使用 new s4 引用既存的对象(编译器创建对象之前先进行检测 "Hello" 是否已经存在,若存在,则返回原对象的引用)

System.out.println(s1.equals(s2)); // true x1

System.out.println(s1 ==s2);       // false 两变量引用不同对象

System.out.println(s3.equals(s4)); // true 两变量引用相同对象

System.out.println(s3 ==s4);       // true 两变量引用相同对象

}

 

不同的类可方便的对该对象进行覆盖。 String 类就覆盖了 Object 类的 equals() 方法,他比较是对象中的内容是否相同。 所以 x1 行输出 true.

 

子类中也推荐覆盖 Object 类中继承的 equals() 方法,自己制定比较规则。

覆盖 equals() 方法的步骤         

  boolean equals(Object o){

                if(this==o) return true;//1, 看看是不是一个对象

                if(o==null) return true;//2, 看看对象是不是空

                if(!(o instanceof 本类类名 )) return false // 看看是不是本类对象

                ......// 根据本类设计。

            }

 

a==b 如果 a,b 引用同一对象,则返回 true

a.equals(b) 如果 a 对象内容和 b 对象内容相同,则返回 true

如果未重载 equals() 方法的类对象使用该方法与另一个对象进行比较,则调用 Object equals() 方法,仍然是对象的比较,返回值为 false

 

 

2 toString() :返回对象的字符串表现形式

toString() :返回对象的字符串表现形式

Object 类中的 toString() 方法他返回的是类名加上他的地址的一个字符串。在子类中推荐覆盖 toString() 方法。

System.out.println(person); 实际上打印的是 person 对象 toString 方法的返回值 .

 

 

3 Clone 方法

根据已存在的对象构造一个新的对象

在根类 Object 中被定义为 protected ,所以需要覆盖为 public

实现 Cloneable 接口,赋予一个对象被克隆的能力 (cloneability)

class MyObject implements Cloneable

{ //…}

 

4 getClass 方法

final 方法,返回一个 Class 对象,用来代表对象隶属的类

通过 Class 对象,你可以查询 Class 对象的各种信息:比如它的名字,它的基类,它所实现接口的名字等。

void PrintClassName(Object obj)

{System.out.println("The Object's class is " +obj.getClass().getName());}

 

 

5 finalize 方法

在对象被垃圾回收器回收之前,系统自动调用对象的 finalize 方法

如果要覆盖 finalize 方法,覆盖方法的最后必须调用 super.finalize

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值