Java類的基本機構(部分)
學習這部分知識之前首先需要了解一下一些抽象的概念:類、對象、屬性、方法(函數)。
為了便於理解,我們用一個例子去理解這些概念。我們經常說人類,那么所有的人都歸屬於一個類,那就是人,人類又是一個非常寬泛的概念,具體到某一個人比如張三,就是人類這個群體中的一個具體的人,即對象;張三會有自己的名字,性別,年齡等等自身的標簽,這些標簽就是我們說的屬性;同時張三在日常生活中會有很多行為:吃、喝、玩等等,這些行為我們稱之為方法(函數)。
一:通過這個例子,我們不難總結出以下幾點:
1:類是具有相同屬性和行為的對象的集合
我們每個人都有自己的名字,性別,年齡等標志每個人的屬性,我們每天的行為都會有一樣的部分,因此大量的人聚在一起構成一個類:人類。
2:類和對象的關系是什么?
類定義了對象的屬性和方法,同時,屬性和方法又是對象的本質。
3:類的作用是什么?
類就是一個模板,用來定義多個對象共同的屬性和方法。
在實際的開發過程中,我們需要先創建一個類,再去實例化為對象,從而調用其方法,達到我們的目標,同時在分析過程中,我們通常是對某個特定的對象去分析,分析其屬性和方法,再去歸類。
二:首先就要掌握如何去創建一個類。格式如下:
[訪問權限修飾符] [修飾符] class 類名 { 類體 }
具體代碼: 這就創建了一個PersonAccount類,代碼中對其屬性進行聲明。
class PersonAccount{ //聲明屬性(賬戶賬號,密碼,余額) String accountId = "123456789"; String pwd = "123456"; double balance; }
三:學會了創建一個類,接下來學習如何創建一個方法。格式如下:
[訪問權限修飾符] [修飾符] 返回值類型 方法名 (形式參數列表) { //形式參數就是我們通常所說的變量,只不過要加上變量類型,多個變量中間用逗號隔開
執行語句;
return 返回值; //如果需要通過這個方法得到一個值,就需要用return,不需要值時用void
}
具體代碼: 我們在PersonAccount類中創建了一個查看ID的方法,前期學習的時候我們對訪問權限修飾符和修飾符不作要求,因此可以略去,后面將會學習。
//查看ID (方法) String getAccountId() { return accountId; }
特別注意:方法中可以調用方法,但不能在方法中定義另一個方法。
- 方法的重載:
在Java里,同一作用域(類)中同名不同參的方法就構成了方法重載。
三大原則:
1:方法(函數)名稱相同;2:參數不同(包括數量、類型、順序的不同);3:同一作用域(類)。
注意:僅返回值類型不同不構成方法重載。
例:
void fun (int x) {...} int fun (int x) {...}
上面這兩種方法就不構成方法的重載,我們可以想一下,當我們調用fun這個方法時,系統此時不知道應該進入哪一個方法去執行,就會報錯。因此,僅返回值類型不同不構成方法的重載。需要注意的一點是,方法的重載與返回值的類型毫無關系。那么返回值存在有什么意義呢。可以理解為根據具體的開發實例,返回值的存在是為了適應某些特定的業務需求而存在。另外,方法的重載一定是對於具有相同功能的方法,不同功能的方法一定不能進行方法重載。
例:
//存款(需要知道存款金額) void deposit(double amount) { balance = balance + amount; } //存款,活期 void deposit(double amount,int term) { balance = balance + amount; }
上面這兩種方法就是對deposit這個方法進行重載,在程序執行過程中,我只需要對這個方法進行傳參,比如1:deposit ( 10000 ) 2:deposit ( 10000,12 ),第一個語句胡自動根方法名和形參的情況自動匹配對應的方法,會調用 void deosit (double amount) { } 這個方法,那么第二個語句則會進入下面的方法。也就是說,我們對方法進行重載以后,只需要對它傳參,也就是給這個方法具體的參數,系統編譯器會自動根據參數的類型和個數及順序來進入各自對應的函數。可以說Java是一門十分智能和高級的編程語言。
- 構造方法
構造方法生來就是為了對類實例化,也就是創建一個對象。兩大特點:1:方法名必須與類名一致;2:無返回值類型
要想使用一個類,實質上也就是使用其中某個對象的方法,我們就必須先去創建一個對象,就需要用構造方法。
[訪問權限修飾符] 方法名 (形參列表) { 方法體 }
初學階段的方法體一般是對屬性的初始化(賦予初值),也就是類的實例化。
例:
public class car{ private String color; private double price; public car() { //這就是一個構造方法,沒有返回值類型,方法名與類名一致。 } public car(String color) { this.color = color; //this.此處用於區分形式參數,表示類中的屬性 } public car(String color,double price) { this.color = color; this.price = price; } }
最后放上一段完整的代碼僅供參考,理解學習。
package LF; //創建一個個人賬戶類 class PersonAccount{ //聲明屬性(賬戶賬號,密碼,余額) String accountId = "123456789"; String pwd = "123456"; double balance; //查看ID (方法) String getAccountId() { return accountId; } //修改密碼 (不需要返回值) void setPwd(String newPwd) { pwd = newPwd; } //查看余額 (方法) double getBalance() { return balance; } //存款(需要知道存款金額) void deposit(double amount) { balance = balance + amount; } //存款,活期 , deposit方法的重載 void deposit(double amount,int term) { balance = balance + amount; } }
package LF; public class testAccount { public static void main(String[] args) { /** * 系統默認的構造方法語句 * PersonAccount(){ * } * 寫或者不寫,這個構造方法都存在 */ PersonAccount account1 = new PersonAccount();//創建一個PersonAccount類的對象: //調用account1里的getAccountId()方法來獲取ID System.out.println("account1的ID是:"+account1.getAccountId()); //調用account1里的getBalance()方法來獲取余額 System.out.println("account1的余額是:"+account1.getBalance()); account1.deposit(10000); //調用deposit方法存款10000元 //調用account1里的getBalance()方法來獲取存款后余額 System.out.println("存款后account1的余額是:"+account1.getBalance()); System.out.println("賬戶初始密碼是:"+account1.pwd); } }