Java中Object类

在开始学习使用class关键字定义类时,就应用到了继承原理,因为在Java中,所有的类都是直接或间接继承了java.lang.Object类。Object类是比较特殊的类,它是所有类的父类,是Java类层中的最高层类。

当创建一个类时,总是在继承,除非某个类已经指定要从其他类继承,否则它就是从java.lang.Object类继承而来的,可见java每个类都源于java.lang.Object类,如String、Integer等类都是继承于Object类;除此之外自定义的类也都继承于Object类。由于所有类都是Object类子类,所以在定义类时,省略了extends Object关键字。

在Object类中主要包括clone()、finalize()、equals()、toString()等方法,其中常用的两个方法为equals()、toString()方法。由于所有的类都是Object类子类,所以任何类都可以重写Object类中的方法。

注意:Object类中的getClass()、notify()、notifyAll()、wait()等方法不能被重写,因为这些方法被定义为final类型。

下面详细讲述Object类中的几个重要方法。
1.getClass()方法
此方法是Object类定义的方法,它会返回对象执行时的Class实例,然后使用此实例调用getName()方法可以取得类的名称。
语法如下:

getClass().getName();

2.toString()方法
toString()方法的功能是将一个对象返回为字符串形式,它会返回一个String实例。在实际的应用中通常重写此方法,为对象提供一个特定的输出模式。当这个类转换为字符串或与字符串连接时,将自动调用重写的toString方法。

package jicheng;

public class ObjectInstance {
	public String toString() {  // 重写toString()方法
		return "在"+getClass().getName()+"类中重写toString()方法";
	}
	public static void main(String[] args) {
		System.out.println(new ObjectInstance()); // 打印本类对象
	}
	

}

运行结果为:
在这里插入图片描述
在本示例中重写父类Object的toString()方法,在子类的toString()方法中使用Object类中的getClass()方法获取当前的类名,定义一段输出字符串,当用户打印ObjectInstance类对象时,将自动调用toString()方法。

3.equals()方法
以前的博客曾讲过equals()方法,当时是比较s双等于运算符与equals()方法,说明==比较的是两个对象的引用是否相等,而equals()方法比较的是两个对象的实际内容。

class V{
	
}
public class OverWriteEquals {
	public static void main(String[] args) {
		String s1="123";
		String s2="123"; // 实例化两个对象,内容相同
		System.out.println(s1.contentEquals(s2));
		V v1=new V();    // 实例化两个V类对象
		V v2=new V();
		System.out.println(v1.equals(v2));
	}

}

运行结果为:true
false

在本实例的结果中可以看出,在自定义的类中使用equals()方法进行比较时,将返回false,因为equals()方法的默认实现是使用“ == ”运算符比较两个对象的引用地址,而不是比较对象的内容,需要在自定义类中重写equals()方法。

  1. 再谈toString
    关于Object类中的toString方法:返回Java对象的字符串表示形式
    在现实的开发过程中,Object里的toString方法已经不够用了
    toString方法需要被重写
    原本是这样实现的:
public String toString() {
	return getClass().getName()+"@"+Integer.toHexString(hashcode());
}

Object类中的toString方法返回,类名@java对象的内存地址经过哈希算法得出的int类型值在转换为16进制

public class Test01{
	public static void main(String[] args) {
	//创建Object类对象	
	Object o1=new Object();
	String oStr=o1.toString();
	System.out.println(oStr);//运行结果java.lang.Object@15db9742
	//创建Person类对象
	Person p1=new Person("liyade",20);
	String pStr=p1.toString();
	System.out.println(pStr);//运行结果Person@6d06d69c
}
}
class Person{
	String name;
	int age;
	Person(String name,int age){
		this.name=name;
		this.age=age;
	}
	
}

重写toString方法:

public class Test01{
	public static void main(String[] args) {
	//创建Object类对象	
	Object o1=new Object();
	String oStr=o1.toString();
	System.out.println(oStr);
	//创建Person类对象
	Person p1=new Person("liyade",20);
	String pStr=p1.toString();
	System.out.println(pStr);
}
}
class Person{
	String name;
	int age;
	Person(String name,int age){
		this.name=name;
		this.age=age;
	}
	//重写toString方法
	//根据项目需求
	public String toString() {
		return "Person[name="+name+",age="+age+"]";
	}
	
}

运行结果:
java.lang.Object@15db9742
Person[name=liyade,age=20]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值