我有一個關於構造函數的問題,如果我使用如下構造函數:
Point originOne = new Point(23,94); 如果我已經正確地理解了originOne將指向23和94. 當我嘗試打印它與System.out.println(originOne)我沒有得到這些值,怎麼會?關於帶參數的構造函數
在此先感謝! =)
我有一個關於構造函數的問題,如果我使用如下構造函數:
Point originOne = new Point(23,94); 如果我已經正確地理解了originOne將指向23和94. 當我嘗試打印它與System.out.println(originOne)我沒有得到這些值,怎麼會?關於帶參數的構造函數
在此先感謝! =)
假設Point
不是java.awt.Point
。
你需要重寫Point
類toString()
,因爲的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;
}
System.out.println(originOne);
這將調用對象的類的toString方法。由於你沒有重寫它,它調用Object類的toString。 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() + "]")
我敢肯定,你可以重寫你的類點的toString()函數,使其打印就像你想讓它。例如:
@Override
public String toString() {
return this.X + "IEATBABYCLOWNS" + this.Y;
}
嘗試此
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;
}
}
試試這個:
System.out.println(originOne.getX() + " " + originOne.getY());
那不是構造 –
這是你的程序的輸出:java.awt.Point中的[X = 23,Y = 94] –
待辦事項你使用awt.Point還是你寫了你自己的課程? – Akkusativobjekt