本文共 2705 字,大约阅读时间需要 9 分钟。
java常用类三:Object
1.Object类概述
java.lang.Object
类是Java语言中的根类,即所有类的父类。一个类中只要没有明显的继承一个类,则肯定是Object类的子类。其中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。如果一个类没有特别指定父类, 那么默认则继承自Object类。那么既然继承了Object类,Object类有哪些作用呢?实际上Object类中提供了很多的方法,如下: 方法名称 | 类型 | 描述 |
---|---|---|
public Object() | 构造 | 构造方法 |
public boolean equals(Object obj) | 普通 | 对象比较 |
public int hashCode() | 普通 | 取得Hash码 |
public String toString | 普通 | 对象打印时调用 |
2.Object类常用方法
这里介绍两个主要方法:toString()和equals()方法。方法一:public String toString方法
在讲解toString()方法之前,先看以下这段代码:class Demo{ //定义Demo类,实际上就是继承了Object类}// 另外创建一个java.class文件:ObjectDemo01public class ObjectDemo01{ public static void main(String args[]){ Demo d = new Demo(); //实例化Demo对象 System.out.println("不加toString()输出:"+d); // 不加toString()输出:Object.Demo@34a245ab System.out.println("加上toString()输出:"+d.toString());//加上toString()输出:Object.Demo@34a245ab }}
从上面的程序运行结果可以看出,加与不加toString()最终的输出结果是一样的,也就是说对象输出的结果是一样的,也就是说对象输出时一定会调用Object类中的toString()方法打印内容。所以利用此特性就可以通过toString()取得一些对象的信息,如下面代码:
class Person{ private int age; public Person(String name, int age){ this.name = name; this.age = age; } public String toString(){ //此处重写toString方法 return "姓名:" + this.name + "; 年龄:" + this.age; }}public class ObjectDemo02{ public static void main(String args[]){ Person per = new Person("张三",30); System.out.println("对象信息:"+per); }}
程序的Person类中重写了Object类中的toString()方法,这样直接输出对象时调用的是被子类重写过的toString()方法。
方法二:对象的比较操作:public boolean equals(Object obj)
Object类中的equals()方法实际上也是可以使用的,默认使用的是按地址进行比较,并不能对内容进行比较。class Person{ private String name; //定义name属性 private int age; //定义age属性 //创建构造方法来初始化该对象,给对象的成员变量赋初值 public Person(String name, int age){ this.name = name; this.age = age; } public boolean equals(Object obj){ if(this==obj){ //地址相等 return true; //肯定是同一个对象 } if(!(obj instanceof Person)){ //不是Person对象 return false; } Person per = (Person) obj; //向下转型:通过父类实例化子类 if(per.name.equals(this.name)&&per.age==this.age){ return true; //依次比较内容 }else{ return false; } } public String toString(){ return "姓名:" + this.name + ":年龄:" + this.age; }}class OjectDemo03{ public static void main(String args[]){ Person per1 = new Person("张三",30); //实例化Person Person per2 = new Person("张三", 30); //实例化Person System.out.println(per1.equals(per2)?"是同一个人!":"不是同一个人!"); System.out.println(per1.equals("hello")?"是同一个人!":"不是同一个人!"); }}
在Person类中重写了equals()方法,首先判断传递进来的对象与当前对象的地址是否相等,如果相等,则肯定是同一个对象,因为在equals()方法处传递参数是Object类型,所以任何对象都可以接收,这样在对象进行向下转型前就必须进行判断,判断传进来的对象是否是Person的实例,如果不是,则直接返回false;如果是,则将各个属性依次进行判断。
写在最后:既然Object类是所有对象的父类,则所有的对象都可以向Object进行转换,在这其中也包含了数组和接口类型(这里就不在演示了),即一切的引用数据类型都可以使用Object进行接收。
如果感觉看的有些生涩,可以把代码运行一下看看,代码都是调试好了的,结合代码会更容易懂的。
转载地址:http://qagki.baihongyu.com/