java面向对象设计 - Java Object类
Java在java.lang包中有一个Object类。
所有Java类都直接或间接扩展Object类。(由于所有的类都继承在Object类,因此省略了extends Object关键字。)
所有Java类都是Object类的子类Object类是所有类的超类(父类)。
Object类本身没有超类。
Object类的引用变量可以保存任何类的对象的引用。
以下代码声明对象类型的引用变量obj:
Object obj;
方法Object类有九个方法,可以在Java中的所有类中使用。
该类中主要有以下方法:其中toString(),getClass(),equals是其中最重要的方法。
1.它是实现在Object类中,我们可以自定义它。它返回对象的字符串表示形式。
通常,它用于调试目的。
public String toString()
2.它在Object类中实现,我们可以自定义它。
它用于比较两个对象的相等性。
public boolean equals(Object obj)
class V {
}
public class OverWriteEquals{
public static void main(String args[]){
String s1="123";
String s2="123";
System.out.println(s1.equals(s2));
V v1= new V();
V v2= new V();
System.out.println(v1.equals(v2));
}
}
输出结果:
run:
true
false
BUILD SUCCESSFUL (total time: 0 seconds)
3.它在Object类中实现,我们可以自定义它。它返回对象的哈希码(整数)值。
public int hashCode()
4.它不在Object类中实现,我们可以通过覆盖克隆方法来自定义它。
它用于创建对象的副本。
protected Object clone() throws
CloneNotSupportedException
5.它不是在Object类中实现,我们可以自定义它
它在对象被销毁之前被垃圾收集器调用。
protected void finalize() throws Throwable
6.它在Object类中实现,我们不能自定义它。
它返回对对象的Class对象的引用。
public final Class getClass()
public class Test02 {
public static void printClassInfo(Object obj) {
// 获取类名
System.out.println("类名:" + obj.getClass().getName());
// 获取父类名
System.out.println("父类:" + obj.getClass().getSuperclass().getName());
System.out.println("实现的接口有:");
// 获取实现的接口并输出
for (int i = 0; i < obj.getClass().getInterfaces().length; i++) {
System.out.println(obj.getClass().getInterfaces()[i]);
}
}
public static void main(String[] args) {
String strObj = new String();
printClassInfo(strObj);
}
}
该程序的运行结果如下:
类名:java.lang.String
父类:java.lang.Object
实现的接口有:
interface java.io.Serializable
interface java.lang.Comparable
interface java.lang.CharSequence
7.它是在Object类中实现的,我们不能自定义它。
此方法通知对象的等待队列中的一个线程。
public final void notify()
8.它是在Object类中实现的,我们不能自定义它。
此方法通知对象的等待队列中的所有线程。
public final void notifyAll()
9.它是在Object类中实现的,我们不能自定义它。
使对象的等待队列中的线程等待,无论是否超时。
public final void wait() throws InterruptedException
public final void wait(long timeout) throws InterruptedException
public final void wait (long timeout, int nanos) throws InterruptedException
**
例子
以下代码显示如何重新实现Object类的toString()方法。
public class Test {
public String toString() {
return "Here is a string";
}
}
Object类中的getClass(),notify(),notifyAll(),wait()等方法被定义为final类型,因此不能重写。
什么是对象类?
Java中的每个对象都属于一个类。
Object类的getClass()方法返回Class对象的引用。以下代码显示了如何获取Cat对象的Class对象的引用:
Cat c = new Cat();
Class catClass = c.getClass();
Class类是通用的,其形式类型参数是由其对象表示的类的名称。我们可以使用泛型重写上面的语句。
Class<Cat> catClass = c.getClass();