Java.lang包——Object类
2009-12-24 16:33
381 查看
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
包——
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
相关文章推荐
- java.lang包【Object类】
- Java.lang 包 (包装类、String类、Math类、Class类、Object类)
- j2se学习笔记-java.lang中的object类
- java.lang.IndexOutOfBoundsException
- java.lang.ClassNotFoundException: org.apache.catalina.loader.DevLoader
- java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTag 解决方法
- java.lang.IllegalArgumentException: Illegal pattern character 'Y' 解决办法
- DatePicker 设置最小日期是当前时间报错:java.lang.IllegalArgumentException: fromDate:xxx does not preced toDate: xx
- 9、FATAL EXCEPTION: java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout
- SSH框架搭建的问题---- java.lang.NoSuchMethodError: org.apache.log4j.Logger.isTraceEnabled()Z
- java.lang.Math
- 1、java.lang.Iterable
- java.lang.OutOfMemoryError的解決方法集
- Caused by: java.lang.ClassNotFoundException: net.sf.json.JSONObject
- Caused by: java.lang.NumberFormatException: Invalid double: ""
- Caused by: java.lang.NumberFormatException: For input string: "[objectHTMLDivElement]"
- 可能是布局文件的问题 java.lang.ClassNotFoundException: android.graphics.drawable.RippleDrawable
- Eclipse运行报错:HTTP Status 500 - javax.servlet.ServletException: java.lang.UnsupportedClassVersionError
- 如何解决java.lang.NoClassDefFoundError错误(最终版)
- Caused by: java.lang.NoSuchMethodError: