Java 我不知道';我不理解toString方法。如何打印对象的内容?
通常在java中,我知道如果我们尝试打印多个对象(例如名为Joe、Steve、Richard的对象),就像这样Java 我不知道';我不理解toString方法。如何打印对象的内容?,java,object,tostring,Java,Object,Tostring,通常在java中,我知道如果我们尝试打印多个对象(例如名为Joe、Steve、Richard的对象),就像这样 System.out.println(Joe); System.out.println(Steve); System.out.println(Richard); 结果将是内存位置,而不是对象本身。但是如果我只对其中一个调用toString方法,它会正常打印对象的内容,这就是我无法理解的 另外,如果toString方法是预定义的方法,为什么我必须在代码中重新编写它? 多谢各位 publ
System.out.println(Joe);
System.out.println(Steve);
System.out.println(Richard);
结果将是内存位置,而不是对象本身。但是如果我只对其中一个调用toString方法,它会正常打印对象的内容,这就是我无法理解的 另外,如果toString方法是预定义的方法,为什么我必须在代码中重新编写它? 多谢各位
public class Time {
int Hours;
int Minutes;
int Seconds;
public Time(int h, int m, int s){
Hours = h;
Minutes = m;
Seconds = s;
}
public Time(){
Hours = 0;
Minutes = 0;
Seconds = 0;
}
public int hours ( )
{
return Hours ;
}
public int minutes ( )
{
return Minutes ;
}
public int seconds ( )
{
return Seconds;
}
public void addhour ( )
{
if ( Hours == 23)
{
Hours = 0 ;
}
else Hours++;
}
public void addminute ( )
{
if (Minutes == 59)
{
Minutes = 0 ;
addhour ( ) ;
}
else Minutes++;
}
public void addsecond ( )
{
if ( Seconds == 59)
{
Seconds = 0 ;
addminute ( ) ;
}
else Seconds++;
}
public String toString(){
return "Time now is " + Hours + ":" + Minutes + ":" + Seconds;
}
public static void main (String[] args) {
Time t = new Time (23, 59, 59);
Time r = new Time (22, 59, 59);
System.out.println(t) ;
System.out.println(r) ;
t.addhour( );
System.out.println(t) ;
t.addminute( );
System.out.println(t) ;
t.addsecond( ) ;
System.out.println(t.toString());
}
}
输出为:
现在是23:59:59
现在是22:59:59
现在是0:59:59
现在是1:0:59
现在是1:1:0
结果将是内存位置,而不是对象本身
如果尚未在类中重写toString()方法,则为否。将使用对象类的默认toString()方法。i、 e
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
它将打印类名及其哈希值
另外,如果toString方法是预定义的方法,为什么我必须在代码中重新编写它
它被称为覆盖,这样当你打印对象时,你的自定义toString()被调用,而不是打印类名和散列的默认toString()。如果Joe(一个人)是对象,那么对象的对象和属性有两个,而不是高度、宽度等是他的属性
System.out.println(Joe);<---it'll print reference
System.out.println(Joe.height);<----It will print attribute assigned to Object
进入内存以查找引用获取该引用以关联其属性,println()
调用toString()
并打印值
您的
toString()
方法是重写类中的实际方法,因为对象是所有类的超类
public String toString(){
return "Time now is " + Hours + ":" + Minutes + ":" + Seconds;
}
另一种方式
若您想获得对象的所有属性,可以创建方法
public String method(YourClass o)
{
return o.hour+":"+o.minute+":"+o.second;
}
这通常是一种打印对象内部值的方法。如果不重写,它将显示对象的默认字符串表示形式,这通常是没有意义的
它不是强制性的,但在调试代码或在控制台中打印数据时通常很有用。toString()是为所有对象预定义的,默认为您描述的行为
您需要重新定义它,因为作为程序员,您所期望的行为是独一无二的。如果反对Joe print“Joe”、“Joe Beluchi”或“Joe,23岁,居住在纽约”。在您的情况下,您必须重写ToString方法并对其进行自定义,以便打印所需的信息
例如,如果您的对象是Person,则可以按如下方式重写ToString(在Person类中):
@Override public class Person {
return "Person{" + "Name=" + this.name + ",
Surname=" + this.surname + ",
Date of birth=" + this.birth + '}';
}
“如果我只对其中一个调用toString方法,它将正常打印对象的内容”-请构造一个测试用例来演示这一点。toString根本不打印任何内容。它只返回实例的基于字符串的表示形式,并且可以打印该表示形式。您已经重写了toString
,因此当您打印对象时,将调用该代码。您期望得到什么?但如何打印整个对象,而不仅仅是一个属性?您正在做您应该做的事情,以覆盖toString
,或者您可以创建一个方法,该方法将对象作为参数,并返回该对象所有属性的字符串。
@Override public class Person {
return "Person{" + "Name=" + this.name + ",
Surname=" + this.surname + ",
Date of birth=" + this.birth + '}';
}