標籤:關係 重載 實現 java 構造方法 stat getname 參數 入參
本章重點:建構函式,封裝,重載
本章痛點:static關鍵字 this關鍵字
1.面向過程與物件導向的區別
面向過程是在Main函數中完成功能,從開始到結束,一步一步的實現功能
物件導向是各個類之間協同工作,相互影響,需要考慮哪些類,有什麼屬性和方法
2.如何使用物件導向進行編程
2.1 抽象出類(找名詞)
2.2 定義屬性(找特徵)
2.3 定義方法(找行為或者動詞)
1 / 2 * 3 * 現在有這樣一個例子,小張到買了一個冰淇淋,他挺高興的 4 * 1.首先我們找名詞發現出小張(人),冰淇淋(物)這兩個類 5 * 2.第二步找人有哪些特徵 我們發現了名字(小張),滿意度(高興)的特徵 6 * 3.第三步發現人有哪些行為 我們通過樣本發現了“買”這個動作 7 */ 8 public class Person{ 9 private String name;//名字 10 private int love;//滿意度 11 12 public void setName(String name){13 this.name = name;14 }15 16 public String getName(){17 18 return this.name19 }20 21 /**22 * 購買的方法23 */24 public void buy(SomeThing st){25 26 }27 28 }29 class Something{30 31 private String name;32 33 public String getName(){34 return name; 35 } 36 }
3.建構函式
3.1 用於類進行初始化的相關操作
3.2 無傳回值
3.3 如果類不定義建構函式,都會提供一個預設的建構函式
3.4 建構函式支援重載
1 /** 2 * Created by niechen on 17/4/18. 3 */ 4 public class Test3 { 5 6 public Test3() { 7 System.out.println("這個是預設的建構函式"); 8 } 9 10 public Test3(int number) {11 System.out.println("這是一個number建構函式");12 }13 14 public Test3(String text) {15 this(10);16 System.out.println("這是一個Text建構函式");18 }19 20 public Test3(String... text) {21 System.out.println("這也是一個建構函式");22 }23 //該方法有傳回值 所以只是個普通的方法24 public void Test3() {25 System.out.println("這隻是一個普通的方法");26 }27 28 public static void main(String[] args) {29 new Test3();30 }31 }
4.static關鍵字
4.1 static關鍵字可以定義在成員變數,方法,靜態地區及內部類上
4.2 static方法不能直接調用非靜態成員的屬性與方法
4.3 static可用於所有對象的共用資料
4.4 類載入的時候,就被賦值了
4.5 靜態記憶體-》靜態代碼塊-》構造方法 (多個靜態代碼塊按照順序進行執行)
/**
* 範例程式碼
* * Created by niechen on 17/4/18. */public class Test4 { public static int age = 10; public static int number; static { age--; System.out.println("靜態代碼塊中輸出age:" + age); } static { age--; System.out.println("第二個靜態代碼塊中輸出age:" + age); } Test4() { number++; System.out.println("建構函式裡輸出age:" + age); } public static int test() { System.out.println(age); return age; } public static void main(String[] args) { new Test4(); new Test4(); Test4.test(); System.out.println("建立對象的個數:" + Test4.number); } public static class Test2 { }
輸出結果:靜態代碼塊中輸出age:9第二個靜態代碼塊中輸出age:8建構函式裡輸出age:8建構函式裡輸出age:88建立對象的個數:2
5.this關鍵字
5.1 可以區分於方法參數與成員變數
5.2 this指的是當前的引用對象,在記憶體中開闢一個記憶體區塊引述自己
5.3 用於在建構函式中調用其他建構函式,必須放在第一行代碼中
1 package org.lyrk.accp8.s2.chapter.one; 2 3 /** 4 * Created by niechen on 17/4/18. 5 */ 6 public class Test5 { 7 private int number; 8 private String name; 9 10 public Test5(int number, String name) {11 this.name = name;//this關鍵字作用之一當參數與屬性名稱相同時,區分內部屬性還是入參參數12 this.number = number;13 }14 15 public Test5() {16 this(10, "你好");//this關鍵字作用之一調用本類中的其他建構函式17 System.out.println("這個是預設建構函式");18 }19 20 public Test5 setName(String name) {21 this.name = name;22 return this;//this關鍵字作用之一返回當前的引用對象23 }24 25 public Test5 setNumber(int number) {26 this.number = number;27 return this;28 }29 30 public static void main(String[] args) {31 Test5 test5 = new Test5().setName("張三").setNumber(10);32 System.out.println(test5.name);33 System.out.println(test5.number);34 }35 36 }
6.關於常量
6.1 用於描述無需改變的數值
6.2 它是靜態不可變的,使用static final進行修飾 (書上只用final修飾)
7.關於封裝
7.1 對內實現具體細節,對外提供方法供於調用
7.2 內部成員變數用private修飾符修飾,對外提供getter setter方法
7.3 public > protected(第二章會講到) > package(不加存取修飾詞) > private
8.關於重載
8.1 必須在同一個類,方法名相同,參數列表不同(方法參數的個數或參數類型不同),與方法傳回值和方法修飾符沒有任何關係
8.2 重載匹配方法規則由精確到模糊,直到找到合適的方法為止
package org.lyrk.accp8.s2.chapter.one;/** * Created by niechen on 17/4/17. */public class Test8 { public static void test(int t1) { System.out.println(t1 + "int"); } public static void test(char t1) { System.out.println(t1 + "char"); } public static void test(double t1, double t2) { System.out.println(t1 + t2); } public static int test(String c,String s){return 0;} //public static int test(int t1){return 0;} public static void test(int t1, double t2) { System.out.println(t1 - t2); } public static void test(Integer t1, double t2) { System.out.println("Integer:" + (t1 - t2)); } public static void main(String[] args) { test(10,2.0); test(‘c‘,2); }}輸出結果:8.097.0
ACCP8.0 java課程第二學期-關於類和對象