Java.lang包——Object类
来源:互联网 发布:淘宝店铺全屏海报代码 编辑:程序博客网 时间:2024/05/17 04:11
Java.lang包——Object类
作者:zccst
Object类是Java中所有类的基类或根类,所有class的对象(包括数组对象)都继承了Object的方法;
Object类有1个构造方法和11个成员方法,其中最常用的是:
1. public Boolean equals(Objectobj); // 用来比较两个对象是不是相等
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()throwsThrowable 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
以下三个函数用于控制线程
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 booleanequals(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运算符对内存地址操作及区别。
例如:
voidEqualCompare()
{
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)); // truex1行
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 本类类名)) returnfalse;//看看是不是本类对象
......//根据本类设计。
}
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'sclass is " +obj.getClass().getName());}
5,finalize方法
在对象被垃圾回收器回收之前,系统自动调用对象的finalize方法
如果要覆盖finalize方法,覆盖方法的最后必须调用super.finalize
- Java.lang包——Object类
- java.lang.Object类
- java.lang.Object类
- java.lang.Object类
- Java.lang.Object 类
- java源码——java.lang.Object
- 黑马程序员——java.lang.Object
- 理解java.lang.Object类
- java.lang解析Object类
- Java基础知识:java.lang包-Object、String、StringBuffer和包装类等
- Java面向对象——包(package) Object 类
- 黑马程序员——Java包、内部类、Object类
- Java.lang包——数学类和数据类型类
- Java.lang包——字符串类(String, StringBuffer)
- 深入研究java.lang.Object 类
- 深入研究java.lang.Object类
- 深入研究java.lang.Object类
- 深入研究java.lang.Object类
- 谈“点到直线距离公式”的向量推导方法
- c++标准库简介
- Activity生命周期和Activity之间传参
- 页面传值验证(防SQL注入)
- Nutch插件机制和Nutch一个插件实例
- Java.lang包——Object类
- C++实现Factory Method模式
- 在Delphi中如何使用RC文件中的字符串表
- 在ASP.NET中重写URL
- Form Validation CodeIgniter
- 困倦 -- 在它该出现的时候出现就是一种享受,在不该出现的时候出现就是一种折磨。
- C#程序删除自身
- GDB调试
- 基类成员的访问限制