在java中打印对象变量会发生什么?

时间:2013-07-12 23:44:42

标签: java

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(two);”既然他们只是建设者? 这两条线的输出是什么?

2 个答案:

答案 0 :(得分:1)

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

假设您定义了一个有意义的toString()方法,打印刚刚构造的对象的概念没有任何问题,例如:

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

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

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

@Override
public String toString() {
    return str + " " + doubleNum;
}

答案 1 :(得分:0)

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

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