用Java构造对象

时间:2014-03-13 19:14:43

标签: java object

我目前正在阅读这本书" Big Java Early Objects"。

在Java"中的#34;构造对象中。他们在下面给出了这个例子。

import java.awt.Rectangle;

/**
   This example demonstrates constructors.
*/
public class ConstructorDemo
{
   public static void main(String[] args)
   {
      // Constructs and prints a rectangle
      System.out.println(new Rectangle(5, 10, 20, 30));

      // Constructs a rectangle and saves it in a variable
      Rectangle box = new Rectangle(5, 10, 20, 30);
      System.out.print("box: ");
      System.out.println(box);

      // The constructor with no arguments
      box = new Rectangle();
      System.out.print("box: ");
      System.out.println(box);
   }
}

我认为这段代码应该打印出一个Rectangle。但没有任何反应,它只在控制台中打印出来:

java.awt.Rectangle[x=5,y=10,width=20,height=30]
box: java.awt.Rectangle[x=5,y=10,width=20,height=30]
box: java.awt.Rectangle[x=0,y=0,width=0,height=0]

我的Eclipse有问题吗?我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

如果您查看由Rectangle.toString()自动调用的System.out.println代码,您会看到它打印出构成Rectangle对象的参数。但是,它不会绘制它:

return getClass().getName() + "[x=" + x + ",y=" + y + ",width=" + width + ",height=" + height + "]";

你没有明确地调用toString(),但是你是:

请参阅:

System.out.println(foo); // foo is a non primitive variable

System是一个类static字段out,类型为PrintStream。因此,您要调用PrintStream的{​​{3}}方法。

它是这样实现的:

   public void println(Object x) {
       String s = String.valueOf(x);
       synchronized (this) {
           print(s);
           newLine();
       }
   }

正如我们所见,它正在调用println(Object)方法。这实现如下:

   public static String valueOf(Object obj) {
       return (obj == null) ? "null" : obj.toString();
   }

在这里,您看到String.valueOf(Object)被调用。

您的代码正常运行。

答案 1 :(得分:1)

我认为您的Eclipse没有任何问题,输出实际上是正确的。如果您希望看到Rectangle的实际绘图,那么您需要重新查看Rectangle类。在Rectangle对象上调用System.out.print会调用.toString方法。这又是您创建的矩形的坐标和尺寸的表示。