拾肆——关于类与关键字的专题研究
一、众类鼻祖——Object 类
Object 类是 Java 中一个比较特殊的类,它是类层次结构的根,位于继承树的顶层,即 Java 中所有的类从根本上都继承自 Object 类。它是 Java 中唯一没有父类的类。如果一个类没有使用 extends 关键字明确标识继承另外一个类,那么这个类就默认继承 Object 类,因此,Object 类是 Java 类层中的最高层类,是所有类的超类。换句话说,Java 中任何一个类都是它的子类。由于所有的类都是由 Object 类衍生出来的,所以 Object 类中的方法适用于所有类,因此下面的两种类的定义形式,从本质上讲是完全一样的。
public class Person //当没有指定父类时,会默认Object类为其父类
{
……
}
等价于:
public class Person extends Object
{
……
}
Object 类中常用方法及操作功能如下表所示:
返回类型 | 方法名称 | 输入参数 | 抛出异常 | 操作功能 |
构造方法 | Object | 创建 Object 对象 | ||
Object | clone | CloneNotSupportedException | 创建并返回此对象的一个副本 | |
boolean | equals | Object | 提示其他某个对象是否与此对象 “ 相等 ” | |
void | finalize | Throwable | 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法 | |
Class | getClass | 返回此 Object 的运行时类 | ||
int | hashCode | 返回该对象的哈希码值 | ||
void | notify | IllegalMonitorStateException | 唤醒在此对象监视器上等待的单个线程 | |
void | notifyAll | IllegalMonitorStateException | 唤醒在此对象监视器上等待的所有线程 | |
void | wait | InterruptedException | 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待 | |
String | toString | 返回该对象的字符串表示 | ||
void | wait | long | InterruptedException | 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待 |
void | wait | long,int | InterruptedException | 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待 |
1.取得对象信息:toString()
Object 类的 toString() 方法是打印对象时被调用,将对象信息变为字符串返回。默认的 toString() 方法有一个特点:为了适用于所有的子类,toString() 在默认情况下输出对象地址,当然,每一个子类也可以自己进行修改。
举例:
//Object类的使用
class Person extends Object
{
String name = "张三";
int age = 25;
}
class ObjectDemo1
{
public static void main(String[] args)
{
Person p = new Person();
System.out.println(p);//直接输出对象
System.out.println(p.toString());
}
}
对象输出时,会默认调用 Object 类的 toString() 方法,将对象信息变为字符串返回。下面举例覆写 Object 类中的 toString() 方法。
//覆写Object类的方法
class Person extends Object
{
String name = "张三";
int age = 25;
//覆写 Object类中的toString()方法
public String toString()
{
return "name:" + this.name + "age:" + this.age;
}
}
class OverrideObject
{
public static void main(String[] args)
{
Person p = new Person();
System.out.println(p);//直接输出对象
}
}