1.3(java学习笔记)构造方法及重载
構造方法,用于對象的初始化,在創建對象時被自動調用的特殊方法。構造方法名稱與類名一致,通過new調用。
下面通過代碼來詳細講解
1 public class Point { 2 int x, y; 3 public Point(int _x, int _y){ 4 x = _x; 5 y = _y; 6 } 7 8 9 public double getDistance(Point p){ 10 return Math.sqrt(Math.pow((double)(p.x), 2) + Math.pow((double)(p.y), 2)); 11 } 12 13 public static void main(String args[]){ 14 Point n = new Point(3, 4);15 System.out.println(n.getDistance(p)); 16 } 17 }
首先構造方法與類名一致,主要用于對象初始化用new調用,構造方法會自動返回對象,故最后不能加return (對象)。
?
這里大家可能會有疑問
1.這個和之前創建好了一個類(public class point{....}),然后直接Point n = new Point(); 的區別,
2.構造方法和類名稱相同創建類的時候到底是哪一個?
這里要補充一點
如果我們沒有定義構造器,則編譯器會自動定義一個無參的構造函數。如果已定義則編譯器不會自動添加。
下面代碼來說明這個問題
1 public class Point { 2 int x, y; 3 Public Point(); //這時我們平常創建類及對象的形式,沒有定義構造方法,編譯器會自動定義一個無參的構造函數。//這里面隱含了一個構造函數,是編譯器自動添加的,只是不顯示出來。 4 public static void main(String args[]){ 5 Point p = new Point(); 6 7 } 8 }
?
所以我們如果在里面我們自己在類里面添加了一個有參的構造方法,那么對象初始化時使用的就是那個有參的構造方法。
可能這里大家會問,那我初始化時用那種無參的方法初始化可不可以,答案是不行的,因為之前說了“如果我們沒有定義構造器,則編譯器會自動定義一個無參的構造函數。如果已定義則編譯器不會自動添加。”,我們在里面定義了一個有參的構造方法,所以編譯器不會幫我們自動添加無參的構造方法。這時如果你想用無參的構造方法初始化則需要再定義一個無參的構造方法。
例如
1 public class Point { 2 int x, y; 3 public Point(int _x, int _y){ 4 x = _x; 5 y = _y; 6 } 7 public Point(){ 8 9 } 10 11 public double getDistance(Point p){ 12 return Math.sqrt(Math.pow((double)(p.x), 2) + Math.pow((double)(p.y), 2)); 13 } 14 15 public static void main(String args[]){ 16 Point p = new Point(3, 4); 17 Point n = new Point(); 18 System.out.println(n.getDistance(p)); 19 System.out.println(p.getDistance(p)); 20 } 21 }這樣就既可以創建有參也可以創建無參的,大家這里可能又會有疑問,這里面有兩個構造方法名稱都相同,初始化時到底是哪一個方法?
這里就涉及到另外一個概念“重載”,重載就是編譯器會根據函數參數的個數,類型自動選擇合適方法。
上圖代碼中的對象p的初始化方法中有兩個參數,編譯器會在兩個Point方法中尋找合適的方法去執行,同樣對n進行初始化的方法沒有參數,編譯器也會根據參數類型,個數去選擇合適的方法。
?
java中函數的重載和這類似
構成重載的條件
方法名相同,參數個數不同,構成重載。
方法名相同,參數類型不同,構成重載。
方法名相同,參數類型相同,參數個數相同,返回值不同,不構成重載。
簡而言之,就是編譯器根據參數個數類型,尋找對應方法時應具有唯一性。
?
轉載于:https://www.cnblogs.com/huang-changfan/p/9304030.html
總結
以上是生活随笔為你收集整理的1.3(java学习笔记)构造方法及重载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tp剩余未验证内容-7
- 下一篇: c#简单多线程实现