程式設計基礎·Java學習筆記·面向物件(上)
Java程式設計基礎之面向物件(上)
(自適應學習進度而進行記錄的筆記,希望有一些小小的用處吧(^∀^●)ノシ)
(新人上路,望多指教,如有錯誤,望指正,萬分感謝(o゚v゚)ノ)
目錄
一、面向物件
(一)面向物件程式設計(Object Oriented Programming,OOP)
(二)包與類(package & class)
(三)物件、方法與屬性(Object & Methods & Properties)
(四)方法(Method)
(五)構造器(Constructor)
一、面向物件
(一)面向物件程式設計(Object Oriented Programming,OOP)
1.在Java中,程式由面向物件為核心進行設計,該方法認為程式由一系列物件組成。類是對現實世界的抽象,包括表示靜態屬性的資料和對資料的操作,物件是類的例項化。 物件間通過訊息傳遞相互通訊,來模擬現實世界中不同實體間的聯絡。 在面向物件的程式設計中,物件是組成程式的基本模組。
2.理解:在Java中。如果要實現一個方法,那麼首先,我們需要回答一些問題。1、這個方法所要做的事情是什麼;2、這個方法的物件是誰;
根據這兩個問題,我們就擁有了建立一個方法最基礎的兩個元素:物件與成員方法,物件是指方法的例項化,即在一個具體的專案事件中的“誰”的問題,回答的就是問題2。除此之外【成員方法】也叫方法,回答的是“所作的事情是什麼?”
此外,在日常生活中的問題,我們通常是一群人做一些事情,那麼我們“一群人”就是一個“類”,在這個類中,我們會擁有一些相同的特徵,這個相同特徵我們就稱之為“屬性”,也就是【成員變數】,而我們所作的事情,做事情的方法,在Java中我們用【成員方法】進行定義。而理解了“誰”在“做什麼”,我們也就明白了面向物件的基本原理,也就是面向物件程式設計。
3.面向物件的三個特性:封裝、繼承、多型(在下文中會具體談到)
(二)包與類(package & class)
1.理解:Java中,可以用包對類進行分類儲存。包與類的形式類似於我們日常使用檔案的資料夾的形式,檔案 = 類,資料夾 = 包;
2.包名:包名一律用小寫完成,如果多個單詞則直接連線,如:methodloading、methodcall;
3.類名:類名一般除了每個單詞外都用小寫完成,單詞首字母用大寫,如果多個單詞則直接連線,如:MethodLoading、MethodCall;
4.包的使用:
包:包中可以繼續建立包,構成包的疊加,表示方法:package01.package02.package03……使用小數點進行連線;
引包:包的呼叫,需要用到關鍵詞import,如果要呼叫包的所有檔案,則使用 * ;即:
import package01; import package01.package02; import package01.*;
第二種引包的方式:在例項化時,例項化物件中加入包名,即可完成呼叫,即:
package01.getAge a = new package01.getAge;
5.類的使用:
類的寫法:修飾詞 class 類名{ };
類的修飾詞:abstract final private public; (暫時還沒學到,先不做記錄,插個眼罷)
類的關鍵詞:extents關鍵詞,通過extents可以將兩個類進行父子類的定義,即將extents前類定義為extents後類的子類
(三)物件、方法與屬性(Object & Methods & Properties)
1.物件:前文說到,物件在Java中是方法的例項化,定義一個新物件,就能對方法進行執行、呼叫等一系列的操作。換而言之,如果要使用呼叫方法,則一定要例項化物件。畢竟,只是有模板還不夠,要實現具體的東西,仍然要往樹丫上填上綠葉與紅花。
2.方法:在Java中,我們會把要做的事情放入方法中,然後把這個方法進行【封裝】,當下一次要用到時,可以進行呼叫或是【繼承】。
3.屬性:除了方法以外,我們的每一個物件都會有不同的屬性,這些屬性在很大部分中可能都是重複的,這個時候我們所準備的屬性就可以重複進行呼叫,節約很多的記憶體冗餘。這種【繼承】的思想,也是Java面向物件中的重要思想。
Example01.有一個代表著人類的Person類,他的屬性有name名字、age年齡、sex性別等,他也有方法可以列印name、age、sex;此時,我們有一個新的類Student,他自然也需要屬性name名字、age年齡、sex性別等,這時,我們就可以從Person類中直接呼叫這些屬性,當然,也可以呼叫Person類中的方法。
4.屬性的寫法:修飾詞 型別 屬性名;(可以賦值,也可以不賦值。當不賦值時,會自動生成一個為0、null、false……的值)
修飾詞:由大到小依次為public protected default(預設) private
//修飾詞所能使用的範圍:
修飾詞 | 類 | 包 | 子類 | 任何地方 |
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
5.方法的寫法:修飾詞 返回值 方法名( ){ }
static:靜態方法只能呼叫靜態變數與靜態方法;
返回值:當返回值為void的時候,方法內不需要寫返回值,此時表示返回0;當返回值為一個確定的型別時,如String、double等,需要手動新增返回值return,返回值必須與確定的型別相同。
小括號:小括號中是可以加變數的,此時加入進去的變數被稱為形參,形參進行書寫時,格式是(資料型別 形參名),同時如果不需要形參時,括號可以為空但不能不寫。
大括號:大括號中的內容就是方法的具體內容;
6.物件的例項化:類名 物件名稱 = new 類名();
例項化時,前後類名可以不進行對應,此時情況為前後類為父子類。前類為父類,後類為子類。此時如果進行呼叫,那麼呼叫的如果時成員變數,不能呼叫子類中的成員變數,只能在父類的成員變數中進行呼叫(一個引用型別變數如果宣告為父類的型別,但實際引用的是子類的物件,那麼該變數就不能再訪問子類中新增的屬性和方法。)。如果此時呼叫的成員方法,那麼呼叫的方法是子類中的方法而不是父類,也就是後類的方法。
(四)方法(Method)
1.方法也稱成員方法,他類似於函式,用於描述物件的行為;
2.方法的呼叫:圖解(還沒畫)JVM模型
3.方法的可變個數的引數:
方法一:陣列
我們定義一個數組,通過往陣列中新增成員變數來完成可變個數的引數的記錄
public class Person { public void printInfo(String[] args){ for(int i = 0 ; i < args.length ; i++){ System.out.println(args[i]); } } } public static void main(String[] args) { Person p = new Person(); //通過陣列定義,輸入字串陣列args,實現方法的可變個數的引數 String[] x = new String[]{"Tom","10","男"} ; p.printInfo(x); //如若進行新引數的定義,則進行新陣列的定義即可實現 String[] y = new String[]{"北京省xxx","13100225588","530225312052552"} ; p.printInfo(y);
}
方法二:Java特定的迭代方式
我們通過特定的方式“...”來對引數實現可變個數的記錄
public class Person { public void printInfoo(String... args){ for(int i = 0 ; i <args.length ; i++){ System.out.println(args[i]); } } } public static void main(String[] args) { p.printInfoo("張三","18","女","雲南省xxx","18055663322","568759522568555"); }
4.方法的過載:Java中,允許在一個程式中定義多個名稱相同,但是引數的型別或個數不同的方法,這就是方法的過載
public class test03 { //方法的過載 public void mOL (int x){ System.out.println("x="+(x*x)); } public void mOL(int x,int y){ System.out.println("x="+(x*x+y*y)); } public void mOL(String x){ System.out.println("x="+x); } public static void main(String[] args) { test03 t = new test03(); t.mOL(2); t.mOL(6,5); t.mOL("Tom"); }
5.方法的遞迴:在Java中,一個方法的內部呼叫自身的過程
需要注意的是,遞迴必須要有結束條件,不然就會陷入無限遞迴的狀態,永遠無法結束呼叫;
每次遞迴都需要逐步遞減,直到有結束值;
public static int getSum(int n){ if(n == 1){ return 1; } int temp = getSum(n - 1); return temp + n; } public static void main(String[] args) { int sum = getSum(4); System.out.println("Sum = " + sum); }
5.匿名呼叫
匿名呼叫方式: 類名 物件名 = new 呼叫類名().方法名();
public class Circle { public double area(double r){ return r*r*3.14; } } public class test02 { public static void main(String[] args) { //匿名呼叫測試 double area = new Circle().area(3); System.out.println("半徑為3的圓的面積為:" + area); } }
(五)構造器(Constructor)
1.構造器也就是構造方法,在Java中,構造方法在類例項化物件時會被自動呼叫,可以把他看作類的一個特殊成員;
2.構造器的寫法:修飾詞 方法名( ){ }
3.條件要求:完成構造方法需要同時滿足以下三個條件
方法名與類名相同;
在方法名的前面沒有返回型別的宣告;
在方法中不能使用return語句返回一個值,但是可以單獨寫return語句來作為方法的結束。
4.構造器的過載:方法可以過載,構造方法也可以過載
在構造器中對方法進行輸入,直接使用 new 類名 即可完成;
//構造器過載 //使得物件的建立更加靈活,方便建立各種不同的物件 //構造器過載,引數列表必須不同 public class Person { public Person(int a){} public Person(String b){} public Person(int a,String b){} } public class test { public static void main(String[] args) { new Person(10); new Person("張三"); new Person(30,"李四"); } }