我有一个关于构造函数的问题,如果我构造一个像这样的构造函数:
Point originOne = new Point(23,94);
如果我理解正确,originOne将指向23和94。
当我尝试使用System.out.println(originOne)打印它时,我没有得到这些值,为什么会这样?
提前致谢! =)
答案 0 :(得分:2)
我很确定你可以覆盖类Point的toString()函数,使其像你想要的那样打印。例如:
@Override
public String toString() {
return this.X + "IEATBABYCLOWNS" + this.Y;
}
答案 1 :(得分:0)
假设Point
不是java.awt.Point
。
您需要覆盖toString()
类的Point
,因为PrintStream#println()
的一个重载方法(System.out是PrintStream
)将对象作为参数,使用对象的toString()
来获取对象的字符串表示,然后打印它:
java.io.PrintStream#println(Object):
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
java.lang.String#valueOf(Object):
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
覆盖类就像在其中添加方法及其实现一样简单:
@Override
public String toString() {
return "x = " + x + " - y = " + y;
}
答案 2 :(得分:0)
System.out.println(originOne);
这将调用该对象的类的toString方法。由于你没有覆盖它,它调用Object类的toString。
答案 3 :(得分:0)
java.awt.Point.toString()的API描述:
Returns a string representation of this point and its location in the (x,y)
coordinate space. This method is intended to be used only for debugging
purposes, and the content and format of the returned string may vary between
implementations. The returned string may be empty but may not be null.
正如您所看到的,输出取决于您使用的JVM,并且您无法保证获得所需的内容。
我会将println更改为:
System.out.println("[" + originOne.getX() + ", " + originOne.getY() + "]")
答案 4 :(得分:0)
试试这个
覆盖toString
方法。请参阅下面的案例
package test;
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public static void main(String[] args) {
Point point = new Point(23, 94);
System.out.println(point);
}
@Override
public String toString() {
return "x : " + x + " y: "+ y;
}
}
答案 5 :(得分:0)
试试这个:
System.out.println(originOne.getX() + " " + originOne.getY());