Object类
在Java中提供了一个Object类,它是所有类的父类,即每个类都直接或间接继承自该类,因此,Object类通常被称之为超类、基类或根类。当定义一个类时,如果没有使用extends关键字为这个类显示地指定父类,那么该类会默认继承Object类。
Object类中自定义了一些方法,其中常用的方法如表1所示。
表1 Object类的常用方法
方法声明 | 功能描述 |
---|---|
boolean equals(Object) | 判断某个对象与此对象是否相等 |
final Class<?> getClass() | 返回此Object的运行时类 |
int hashCode() | 返回该对象的哈希码值 |
String toString() | 返回该对象的字符串表示 |
void finalize() | 垃圾回收器调用此方法来清理没有被任何引用变量所引用对象的资源 |
了解了Object类中的常用方法后,下面以toString()方法为例来演示Object类中方法的使用,如文件1所示。
文件1 Example06.java
1 // 定义Animal类
2 class Animal {
3 // 定义动物叫的方法
4 void shout() {
5 System.out.println("动物叫!");
6 }
7 }
8 // 定义测试类
9 public class Example06 {
10 public static void main(String[] args) {
11 Animal animal = new Animal(); // 创建Animal类对象
12 System.out.println(animal.toString()); // 调用toString()方法并打印
13 }
14 }
运行结果如图1所示。
图1 运行结果
文件1中,第12行代码调用了Animal对象的toString()方法,虽然Animal类中并没有定义这个方法,但程序并没有报错。这是因为Animal默认继承了Object类,在Object类中定义了toString()方法,在该方法中输出了对象的基本信息。
Object类的toString()方法中输出信息具体格式如下:
getClass().getName() + "@" + Integer.toHexString(hashCode());
为了方便初学者理解上面的代码,接下来分别对其中用到的方法进行解释,具体如下:
● getClass().getName():代表返回对象所属类的类名,即包名+类名的全限定名称。
● hashCode():代表返回该对象的哈希值。
● Integer.toHexString(hashCode()):代表将对象的哈希值用16进制表示。其中,
hashCode()是Object类中定义的一个方法,这个方法将对象的内存地址进行哈希
运算,返回一个int类型的哈希值。
在实际开发中,通常希望toString()方法返回的不仅仅是对象的基本信息,而是一些特有的信息,为此可以通过重写Object的toString()方法来实现,如文件2所示。
文件2 Example07.java
1 // 定义Animal类
2 class Animal {
3 // 重写Object类的toString()方法
4 public String toString() {
5 return "这是一只动物";
6 }
7 }
8 // 定义测试类
9 public class Example07 {
10 public static void main(String[] args) {
11 Animal animal = new Animal(); // 创建Animal对象
12 System.out.println(animal.toString()); // 打印animal的toString()
13 }
14 }
运行结果如图2所示。
图2 运行结果
文件2中,Animal类重写了Object类的toString()方法,当在main()方法中调用toString()方法时,就输出了Animal类的描述信息“这是一只动物”。