一. 類的簡介
1. 概念
要掌握面向對象,我們就不得不先了解一下什麼是類。類是對表示客觀世界中某類群體的一些基本特征的抽象。它會在一組相同或相似的對象中,抽取出共性的特征和行為,保留我們所關注的部分。
當然,這個概念對于小白來說很難了解,壹哥必須給大家舉個栗子。
壹哥很久以前上大學時,去生産手機裝置的電子廠做過暑假工。當時那個廠子是給摩托羅拉生産手機殼的,你們知道手機殼是怎麼生産的嗎?肯定不是靠人力把一個個殼子給雕刻出來,而是利用專門的“模具”來生産。就是每一款手機設計出來之後,就會針對該款手機的外形進行“開模”,先生産出一款手機外殼的“模具”。接下來工廠裡面就調制出所需的塑膠(液體形态),把這個液體的塑膠往模具裡一倒一壓,等冷卻後摳出來就是一個個的手機殼了。
其實這樣的場景,壹哥相信很多人都見過,我們家裡做飯用的大鐵鍋、洗臉盆等用品,也都是通過對應的模具生産出來的。
那麼大家想一下,這個“模具”不就是“對某類群體的一些基本特征的抽象”嗎?把所有手機殼或者是鍋碗瓢盆的“共性的特征和行為抽取出來”!是以,“模具”就是一個“類”,“類”就是一個“模具”!我們可以利用“類”生産出很多同類的“産品”,這些個産品就是“對象”。
2. 類與對象的關系
類是對象的抽象,對象是類的具體。也就是說,類是一種概念模型,定義了對象的所有特性和所需的操作。而對象是一個真實的模型,是一個具體的實體。是以類是描述了一組具有相同特性(屬性)和相同行為(方法)的一組對象的集合。
類是構造面向對象程式的基本機關,是抽取了同類對象的共同屬性和方法所形成的對象或實體的“模闆”。而對象則是現實世界中實體的描述,對象要建立才存在,有了對象才能對對象進行操作。概括總結就是:
類定義了對象應具有的特征和行為,類是對象的模闆;
對象是擁有多個相同特征和行為的實體,對象是類的執行個體。
是以,類是對象的模闆,對象是類的執行個體。 面想對象其實就是從具體到抽象,再從抽象到具體的過程 。 就好比“人類”是一個類别的統稱,但并不是某個具體的對象“張三、李四”;而“張三、李四”則是一個個具體的“對象”,不是“人類”。
3. 類的組成
在一個類中,主要包括兩個核心要素,即屬性和行為。屬性其實就是類中的各種變量,行為其實就是類中的各種方法。
屬性:對應着各種變量,包括成員變量、類變量等;
行為:對應着各種方法,包括執行個體方法、靜态方法、靜态代碼塊等。
接下來壹哥會給大家講解如何建立一個類,并介紹以上這些概念該如何用代碼定義,另外我們也會在後面通過專門的文章來學習這些内容。
二. 類的建立
1. 建立步驟
我們要用代碼建立一個類,可以按如下幾個步驟進行實作:
确定類名;編寫成員變量;編寫成員方法。
通過以上步驟,一個類就可以建立出來了。
2. 基本文法
在 Java 中,定義一個類需要使用 class 關鍵字、類名和一對表示程式體的大括号,基本文法如下:
[public][abstract|final]class<class_name>[extends<class_name>][implements<interface_name>] {
//屬性部分
<property_type> <property1>;
<property_type> <property2>;
<property_type> <property3>;
......
//方法部分
method1();
method2();
method3();
......
}
複制代碼
在上述文法中,“[]”中括号裡的部分是可選的,可以省略,中括号外面的部分則是必須的。“|”豎線表示“或的關系”,比如abstract|final,說明可以使用abstract 或 final 關鍵字,但這兩個關鍵字不能同時出現。
3. 關鍵字
在上述文法中,出現的各關鍵字含義如下:
public : 表示“公共的”,使用 public 修飾,該類就可以被其他類和程式通路。Java程式的主類必須是 public類,凡是需要作為公共工具供其他類和程式使用的類都應定義為 public類。abstract : 表示“抽象的”,被abstract修飾的類是抽象類。抽象類不能被執行個體化,抽象類中可以有抽象方法(使用 abstract修飾的方法) 和具體方法(沒有使用 abstract修飾的方法)。繼承抽象類的所有子類,都必須實作該抽象類中所有的抽象方法(除非子類也是抽象類)。final : 常量修飾符。被final修飾的類不允許被繼承。class : 聲明類的關鍵字。class_name : 類的名稱。extends : 表示繼承的關鍵字,表示一個類繼承其他類。implements : 表示實作的關鍵字,表示一個類實作某些接口。property_type : 成員變量的類型。property : 成員變量的名稱。method() : 成員方法的名稱。
4. 命名規則與規範
既然我們要建立一個類,必須給該類起一個名字,這就是“類名”。Java類名的命名規則,也要遵循我們前面學過的Java命名規範,讓我們再來複習一下Java的命名規則與規範吧:
①. 辨別符由 **字母(含英、中、日、俄等)、數字、下劃線"_" 和 美元符号∗∗∗∗(音:������)組成,∗∗如���、�7、�����、∗∗∗∗(音:dollar)組成,∗∗如age、G7、value、salary ;
②. 不能以數字開頭, 如123abc ;
③. 嚴格區分大小寫, 如class與Class是不同的 ;
④. 長度無限制(一般不要超過15個字元);
⑤. 不能是Java中的保留字和關鍵字。
以上這些是必須要遵循的規則,還有一些建議我們遵守的規範,如下:
辨別符命名習慣:盡量做到見名知意,如Order訂單類,不要寫a、b、c這種名稱;變量名/方法名/參數名:首字母要小寫。如果名稱由多個單詞組成,第一個單詞的首字母應小寫,剩下的單詞首字母應大寫(駝峰式命名法),例如:xxxYyyZzz、numCounter;類名: 單詞首字母應大寫,如果類名由多個單詞組成,每個單詞的首字母都應大寫(帕斯卡命名法),例如:XxxYyyZzz、OrderCancel;
是以我們在給類進行命名時,也要遵守以上規則和規範。
5. 基本案例
學習了以上這些理論内容之後,我們通過一個小案例來感受一下如何建立一個類。
/**
* @author 一一哥Sun
*/
public class Person {//類名首字母大寫,要見名知意
//定義屬性
// 姓名
public String name;
// 性别
private String sex;
// 年齡
private int age;
//定義方法
/**
* 吃飯
*/
public void eat() {
System.out.println("我會吃飯...");
}
/**
* 說話
*/
public void speak(String name, String sex, int age) {
System.out.println("我會說話...我的名字是:" + name + ",性别:" + sex + ",年齡=" + age);
}
}
複制代碼
我們在上面的代碼中,就是按照建立類的3個核心步驟進行實作的:
聲明類: 給類起一個合格的名字。編寫類的屬性: 類的屬性就是類中的變量,通過在類的主體中定義變量來描述類所具有的特征。類中聲明的變量分為類的成員變量和靜态變量。編寫類的方法: 類的方法描述了類所具有的行為,它們是類的成員方法,我們可以簡單地把方法了解成可以獨立完成某個功能的單元子產品。
大家注意,類中的屬性和方法都是類的成員。
三. 屬性的定義
壹哥在上面給大家講了,類的成員包括屬性和方法,其中方法的定義我會放在以後進行專門地講解,今天我們先來學習一下屬性的定義。
1. 屬性簡介
類中的屬性,其實就是類中的變量,通過在類的主體中定義變量來描述類所具有的特征。類中聲明的變量分為類的成員變量(執行個體變量)和靜态變量(類變量) 。
2. 基本文法
我們要想定義類的屬性,應該遵循一定的文法格式,如下:
[public|protected|private][static][final]<type><variable_name>
複制代碼
上面文法中,各參數的含義如下:
public、protected、private:通路修飾符。用于表示成員變量的通路權限。static:靜态修飾符。表示該成員變量為類變量,也稱為靜态變量。final:常量修飾符。表示将該成員變量為常量,其值無法被改變。type:變量的類型。variable_name:變量名稱。
我們可以在聲明變量的同時對其進行初始化,如果聲明變量時沒有對其進行初始化,則系統會使用預設值進行初始化。接下來我們就通過一個代碼案例來學習屬性的定義。
3. 基本案例
/**
* @author 一一哥Sun
*/
public class Car {
// 汽車品牌
public String logo;
// 汽車顔色
private String color;
// 汽車價格
private double price;
//靜态常量:定義一個字元串常量
public static final String CAR_MANUFACTURER="大衆";
/**
* 為私有的成員變量提供對外的公開方法,友善其他類對該屬性進行通路。
* 擷取汽車的logo
*/
public String getLogo() {
return logo;
}
/**
* 為汽車的logo重新指派
* @param logo
*/
public void setLogo(String logo) {
this.logo = logo;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
//複寫toString方法,傳回汽車資訊
@Override
public String toString() {
return "[Logo]=" + logo + ",[Color]=" + color + ",[Price]=" + price;
}
}
複制代碼
在上述Car汽車類中,我們定義了 3個成員變量和1個靜态變量。一般情況下,像這種類的成員變量,通路修飾符都是private私有的,表示該成員變量隻是被該類自己通路,不能被外界通路。如果我們想要被外界通路,可以對外提供一些該屬性對應的公開方法,如setXXX和getXXX(),而不是被其他類來直接通路該屬性。
另外我們還定義了一個公開靜态的字元串常量。一般情況下,一個常量都是可以被其他類直接通路的,是以經常設定成公開的和靜态的,這樣友善直接調用。而常量的值一旦被設定之後,就不能在運作時被修改了,這也就是常量的含義:保持常态不變!
4. 成員變量與局部變量的對比
我們在上面說過,類中的屬性其實就是變量,有成員變量和靜态變量。但是我們知道,還有一種局部變量,那麼成員變量與局部變量有什麼差別呢?我們來看下表:
差別 | 局部變量 | 成員變量 |
位置 | 定義在方法内 | 定義在方法外,類的裡面 |
預設值 | 沒有預設值 | 系統提供預設值,與之前講的數組一緻 |
作用域 | 所在的{} | 在整個類中 |
重名 | 在不同的作用域可以重名 | 不能重名 |
生命周期 | 方法執行完被銷毀 | 當對象被銷毀的時候銷毀 |
另外我們還要注意,局部變量是可以與執行個體變量重名的。如果成員變量和局部變量的名稱相同,Java會遵循就近原則,就是哪個近采用哪個變量。
------------------------------正片已結束,來根事後煙----------------------------
四. 結語
至此,壹哥就把與類相關的内容給大家講解完畢了,現在你知道該如何建立一個類了嗎?我們在建立類時,要遵守定義類時的命名規則和基本文法,掌握常用關鍵字的基本含義,多寫多練自然就會啦。
在下一篇文章中,壹哥會繼續講解面向對象中關于對象的内容,敬請期待哦。如果你獨自學習覺得有很多困難,可以加入壹哥的學習互助群,大家一起交流學習。
五. 配套視訊
如果你不習慣閱讀技術文章,或是對文中的技術概念不能很好地了解,可以來看看壹哥幫你篩選出的視訊教程。與本文配套的Java學習視訊,連結如下:
player.bilibili.com/player.html…
六. 今日作業
1. 第一題
設計一個學生類,并設計出一個學生應有的屬性,請把實作代碼在評論區貼出來哦。