[toc] https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html # Constructor **constructor is NOT method** 一個class會有constructor, 在建立object時被呼叫。 - 必須與class同名 - 沒有return-type - 可以寫多個constructor, 但參數不能一樣 如果class沒有任何constructor, implict constructor就會存在。無參數,無body ```java= class Point { public int x; public int y; } ``` it's actually... ```java= class Point { public int x; public int y; // implict constructor public Point() { } } ``` 因此我們來加一些constructor: ```java= class Point { public int x; public int y; public Point() { x = -1; y = -1; } public Point(int startX, int startY) { x = startX; y = startY; } } //---------- in Main.java ---------- public class Main { public static void main(String[] args) { Point p = new Point(); System.out.println(p.x + " " + p.y); // -1 -1 Point p = new Point(100, 200); System.out.println(p.x + " " + p.y); // 100 200 } } ``` <!-- 多個constructor: ```java= //---------- in Ship.java ---------- public class Ship { private String name; public Ship(String name) { //a-custom-constructor this.name = name; } public Ship() { //another-custom-constructor this.name = "default name"; } //getter & setter public String getName() { return this.name; } public void setName(String name) { this.name = name; } } //---------- in Main.java ---------- public class Main { public static void main(String[] args) { Ship s = new Ship("Britannic"); System.out.println(s.getName()); //"Britannic" Ship s2 = new Ship(); System.out.println(s2.getName()); //"default name" } } ``` 用constructor呼叫其他的constructor可以用this(...); ```java public Ship(String name) { //a-custom-constructor this.name = name; } public Ship() { this("default name"); } ``` -->