之前學cpp的時候已經學過了,在此對java的面向對象也記錄熟悉一下哈~
之前博文《Android學習筆記之——Android Studio的安裝(3.6版本)、Java的基本語法及Android的概述 》有介紹過如何基於android studio進行java開發,但是本博文不打算對代碼進行運行(雖然建議學習的時候邊看邊敲)
目錄
方法
Java方法是語句的集合,它們在一起執行一個功能。
- 方法是解決一類問題的步驟的有序組合
- 方法包含於類或對象中
- 方法在程序中被創建,在其他地方被引用
- 方法定義的順序無所謂
- 一個方法內部不能定義另外一個方法
- 方法必須調用纔會執行
方法的定義
修飾符 返回值類型 方法名(參數類型 參數名){
...
方法體
...
return 返回值;
}
方法包含一個方法頭和一個方法體。下面是一個方法的所有部分:
- 修飾符:修飾符,這是可選的,告訴編譯器如何調用該方法。定義了該方法的訪問類型。如:public static
- 返回值類型 :方法可能會返回值。returnValueType 是方法返回值的數據類型。有些方法執行所需的操作,但沒有返回值。在這種情況下,returnValueType 是關鍵字void。
- 方法名:是方法的實際名稱。方法名和參數表共同構成方法簽名。
- 參數類型:參數像是一個佔位符。當方法被調用時,傳遞值給參數。這個值被稱爲實參或變量。參數列表是指方法的參數類型、順序和參數的個數。參數是可選的,方法可以不包含任何參數。(如果有多個,用逗號)
- 方法體:方法體包含具體的語句,定義該方法的功能。
- return:首先停止方法,其次將後面的返回值返回去調用處
定義方法時。三個注意點:
- 返回值類型
- 方法名稱
- 參數列表
方法的調用
方法名稱(參數);
方法調用的三種格式
- 單獨調用:方法名稱(參數)
- 打印調用:Sytem.out.println(方法名稱(參數));
- 賦值調用:變量=方法名稱(參數)
而對於返回值爲void的方法,只能單獨調用。
使用方法的一些注意事項
方法的重載(Overload)
就是說一個類的兩個方法擁有相同的名字,但是有不同的參數列表(參數的數目、類型不同、多參數的順序不同)。
Java編譯器根據方法簽名判斷哪個方法應該被調用。
方法重載可以讓程序更清晰易讀。執行密切相關任務的方法應該使用相同的名字。
重載的方法必須擁有不同的參數列表。你不能僅僅依據修飾符或者返回類型的不同來重載方法。所以方法的重載與參數的名稱及返回值的類型無關。
面向對象
概述
程序中有面向過程和麪向對象兩種。
面向過程:當需要實現一個功能的時候,每一個具體的步驟都要親歷親爲,詳細處理每一個細節。
面向對象:不關心具體的步驟
面向對象的三大特徵:封裝、繼承、多態
類和對象
- 對象:對象是類的一個實例,有狀態和行爲。例如,一條狗是一個對象,它的狀態有:顏色、名字、品種;行爲有:搖尾巴、叫、喫等。
- 類:類是一個模板,它描述一類對象的行爲和狀態。一組相關屬性(狀態信息)和行爲(做什麼)的集合。
類是對一類事物的描述,是抽象的。對象是一類事物的實例,是具體的。類是對象的魔板,對象是類的實例。
類的定義
public class 類名稱{
成員變量
變量類型 名稱
成員方法
方法的聲明(成員方法沒有static)
}
成員變量:對應事物的屬性。直接定義在類當中,在方法的外邊
成員方法:對應事物的行爲。不要寫static關鍵字
一個類可以包含以下類型變量:
- 局部變量:在方法、構造方法或者語句塊中定義的變量被稱爲局部變量。變量聲明和初始化都是在方法中,方法結束後,變量就會自動銷燬。
- 成員變量:成員變量是定義在類中,方法體之外的變量。這種變量在創建對象的時候實例化。成員變量可以被類中方法、構造方法和特定類的語句塊訪問。
- 類變量:類變量也聲明在類中,方法體之外,但必須聲明爲static類型。
局部變量與成員變量的區別:
構造方法
每個類都有構造方法。如果沒有顯式地爲類定義構造方法,Java編譯器將會爲該類提供一個默認構造方法。
在創建一個對象的時候,至少要調用一個構造方法。構造方法的名稱必須與類同名,一個類可以有多個構造方法。
創建對象
標準的類
封裝
在面向對象程式設計方法中,封裝(英語:Encapsulation)是指一種將抽象性函式接口的實現細節部分包裝、隱藏起來的方法。
封裝可以被認爲是一個保護屏障,防止該類的代碼和數據被外部類定義的代碼隨機訪問。
要訪問該類的代碼和數據,必須通過嚴格的接口控制。
封裝最主要的功能在於我們能修改自己的實現代碼,而不用修改那些調用我們代碼的程序片段。
適當的封裝可以讓程式碼更容易理解與維護,也加強了程式碼的安全性。
封裝在java中的體現:
- 方法就是一種封裝
- 關鍵字private也是一種封裝
一旦使用使用private修飾,那麼本類以外不能直接訪問。進而可以提高代碼的安全性
而間接訪問private成員變量,就是定義一對Getter/Setter方法。
修改屬性的可見性來限制對屬性的訪問(一般限制爲private),例如:
public class Person {
private String name;
private int age;
}
這段代碼中,將 name 和 age 屬性設置爲私有的,只能本類才能訪問,其他類都訪問不了,如此就對信息進行了隱藏。
對每個值屬性提供對外的公共方法訪問,也就是創建一對賦取值方法,用於對私有屬性的訪問,例如:
public class Person{
private String name;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public void setName(String name){
this.name = name;
}
}
採用 this 關鍵字是爲了解決實例變量(private String name)和局部變量(setName(String name)中的name變量)之間發生的同名的衝突。
This方法
this來指代當前的類。通過誰調用的方法,誰就是this
繼承
繼承是多態的前提。
繼承主要解決的問題是:共性抽取
格式:
class 父類 {
}
class 子類 extends 父類 {
}
關於同一個類中變量重名
如果不寫this和super的話,訪問的方法是就近原則。
方法的重寫與重載
關於繼承中的構造方法
super關鍵字
this關鍵字
多態
多態是同一個行爲具有多個不同表現形式或形態的能力。
多態就是同一個接口,使用不同的實例而執行不同操作,如圖所示
extends繼承或者implements實現是多態性的前提。
成員變量與成員方法的規則不一樣!
多態的作用
其他知識點筆記
數組
- 數組是一種引用的數據類型
- 數組當中的數據類型必須統一
- 數組的長度在程序運行期間不可改變。
初始化方法:
- 動態初始化(指定長度)
數據類型 [] 數組名稱=new 數據類型[數組的長度];
- 靜態初始化(指定內容)
數據類型 [] 數組名稱=new 數據類型[] (元素1,元素2,...);
- 直接打印數組的名稱,得到的是數組對應的地址。
- 數組[數字]纔是對具體元素的引用,從0開始,注意是中括號。
數組長度在程序運行過程中不可改變。通過數組.length來獲取長度
Java中內存劃分
API
ArrayList<E>
長度爲任意可變的
<E>爲泛型,也就是裝在集合當中的所有元素,全部都是統一的什麼類型。
注意,泛型只能是引用類型,不能是基本類型。
static
多個對象共享同一個數據。
參考資料
https://www.runoob.com/java/java-methods.html