Java对象重写toString()方法的意义

一、万类继承Object

    Java在学到继承的时候,我们会知道,Object会是所有类的顶级类,其他类会隐性的继承Object类,何以见得会继承Object呢?口说无凭,直接看代码。

 

    在上面,我定义了一个类TestObject,在main方法里面创建了这个对象,从左边代码行数可以看出,我这里代码没有超过9行,但调用TestObject实例化对象时,却出现了这么多方法。clone(),equals(),finalize()......这些方法我在当前类压根就没写。那出现这么多方法的原因是什么呢?

 

   

    可以看到,方法后面写了来源,可见这个方法是来源于Object。

    我们在进到Object的源码看看,里面到底有些啥东东。

 

   

    可以看到,刚刚在上面见到的方法,Object类里面全都有,这下就能解释万类基于Object的事实了,我们并没有显式的继承Object,但Java偷偷的将我们写的类送了个爸爸

    好,解释到这一层,我们就可以探讨重写toString()方法的意义了。从上面Object源码的图片上我们可以看到toString()方法,

    这里返回了当前类的名字加上哈希码。(代码具体细节不解释,先知道是这回事就好

    我们回到我们自定义的TestObject类中输出一下

 

   

    从控制台中的输出,不难看出就是Object类里的toString()方法返回的结果。

 

二、为什么重写toString()方法呢?

假设我们自定义了一个类Student

我们没有重写toString()方法,那我们实例化Student对象时,想要输出对象里面的属性值,会出现这种情况。

可以看出,这里调用的是Object对象的toString()方法

重写toString()方法后

    重写后覆盖了原来Object类的toString()方法,这样就得到了我们想要的信息啦。

 

三、总结

    重写toString()方法其实是为了输出对我们有用的信息,不重写输出的信息没啥用。

 

### 回答1: 好的,以下是Java重写toString方法的示例: ```java public class MyClass { private String name; private int age; public MyClass(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "MyClass{" + "name='" + name + '\'' + ", age=" + age + '}'; } } ``` 在这个示例中,我们创建了一个名为`MyClass`的类,并在构造函数中初始化了`name`和`age`实例变量。我们使用`@Override`注解来重写`toString`方法,该方法将返回一个包含`name`和`age`字段值的字符串表示形式。注意,我们在返回的字符串中使用了字符串连接运算符`+`和转义字符`\`来生成一个格式化的字符串。 ### 回答2: 在Java中,每个类都会隐式继承自Object类,它包含了一些通用的方法,其中包括toString()方法。这个方法的作用是将对象转换成字符串表示形式。当我们没有在类中显式地重写toString()方法时,调用对象toString()方法会返回一个由类名,'@'符号和对象的哈希码组成的字符串。 为了让toString()方法返回符合我们的需求的字符串表示形式,我们可以在类中重写方法。通过重写toString()方法,我们可以自定义返回的字符串,以使其包含我们认为重要的属性或状态信息。 重写toString()方法的步骤如下: 1. 在类中加入toString()方法的定义。 2. 在该方法内部,构造一个包含类的属性或状态信息的字符串。可以使用字符串拼接操作符("+")将不同的属性和信息连接在一起。 3. 返回构造的字符串。 例如,假设我们有一个名为Student的类,它包含学生的姓名和年龄信息。我们可以重写该类的toString()方法,以返回一个包含学生姓名和年龄的字符串表示形式。代码示例如下: public class Student { private String name; private int age; // 构造函数和其他方法 @Override public String toString() { return "Student: [name=" + name + ", age=" + age + "]"; } } 通过调用Student对象toString()方法,可以得到一个类似于"Student: [name=Tom, age=20]"的字符串。这个字符串提供了学生的姓名和年龄信息,更符合我们的需求。 总之,重写toString()方法可以让我们得到符合需求的对象字符串表示形式,以便更好地理解和调试代码。 ### 回答3: 在Java中,每个类都继承自Object类,而Object类中有一个名为toString()的方法。这个方法用于返回一个表示该对象的字符串。 然而,Object类中默认的toString()方法返回的是对象的哈希码值的字符串表示。这对于实际开发中的调试和打印输出来说往往不够直观和有用。 因此,在自定义类中,我们可以重写toString()方法,来返回我们所需的信息。 要重写toString()方法,我们需要按照以下步骤进行: 1. 在类中添加一个public修饰的toString()方法。 2. 在该方法中,以字符串的形式返回我们所需的信息。 例如,假设我们有一个名为Person的类,该类具有name和age两个属性,我们希望在调用toString()方法时返回"姓名:XXX,年龄:XXX"的字符串表示。 我们可以这样重写toString()方法: ``` public class Person { private String name; private int age; // 构造方法和其他方法省略 @Override public String toString() { return "姓名:" + name + ",年龄:" + age; } } ``` 这样,当我们通过调用Person对象toString()方法时,就会返回符合我们要求的字符串表示。 通过重写toString()方法,我们可以在输出对象时获得更清晰和有用的信息,方便调试和理解代码。而且,许多Java类库中的类,如String、Integer等,已经重写toString()方法,使得输出它们时获得更有意义的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值