0
public class test
{
        public static void main (String[ ] args )
        {
            TheClass one = new TheClass(); constructor
            TheClass two = new TheClass(str , doubleNum); // I: calling the parameter constructor to //pass: “David William” and 3.5 to the object
            System.out.println( one );   
            System.out.println( two );   

            // call the method staticMethod
            System.out.print(two.staticMethod());
        }
}


class TheClass
{

     private String str;
     private static int intNum = 0;
     private double doubleNum ;


     public TheClass()
     {
          str = "unknown";
          doubleNum = 0.0;
     }

     public TheClass (String s, double d)
     {
          str = s;
          doubleNum = d;
     }

     public static void staticMethod ()
     {
          intNum ++;
     }
}

做“System.out.println(one);”有意义吗?&“System.out.println(二);” 因为它们只是构造函数?这两条线的输出是什么?

4

2 回答 2

1

由于您尚未定义toString()方法,因此“打印”您的类实例的输出对人类没有用处。

假设你定义了一个有意义的toString()方法,打印一个刚刚构造的对象的概念并没有错,比如:

System.out.println( new TheClass(str , doubleNum) );

这只是意味着您不会在该行之后引用该对象(因此它可用于垃圾收集)。

尝试相同的代码,但将此方法添加到您的类中:

@Override
public String toString() {
    return str + " " + doubleNum;
}
于 2013-07-12T23:49:07.463 回答
0

如果该类具有覆盖的toString()实现,则将使用该实现,并且该实现返回的任何字符串都将被打印出来。否则,JVM 将尝试查看它是否可以找到toString()该类的祖先的实现并使用它。

最终,也就是说,如果 JVM 无法找到合适的重写实现.toString()Object#toString()则调用 (Java 中的每个类都派生自Object)。这导致输出不是很有用。

于 2013-07-12T23:50:45.333 回答