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文件:ObjectDemo01
public 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进行接收。
如果感觉看的有些生涩,可以把代码运行一下看看,代码都是调试好了的,结合代码会更容易懂的。