我目前正在阅读这本书" 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有问题吗?我怎样才能做到这一点?
答案 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方法。这又是您创建的矩形的坐标和尺寸的表示。