一、描述
- 類是一種抽象的數據類型,它是對某一類事物整體的描述或定義,但是並不能代表某一個具體的事物。
- 例如,我們生活中所說的詞語:動物、植物、手機、電腦等等。這些也都是抽象的概念,而不是指的某一個 具體的東西。
二、類與對象的關系
- 從認識論角度考慮是先有對象后有類。對象,是具體的事物。類,是對對象的抽象。
- 從代碼運行角度考慮是先有類后有對象,類是對象的模板。
- 例如Person類、Pet類、Car類等,這些類都是用來描述或定義某一類具體的事物應該具備的特點和行為,而對象是抽象概念的具體實例,例如張三就是人的一個具體實例。
- 在java中,沒有類就沒有對象,然而類又是根據具體的功能需求,進行實際的分析,最終抽象出來的。
示例:
/*
張三是引用類型變量,它指向一個Person對象,這個Person對象就是Person類的一個具體實例。
能夠使用的是具體實例,而不是類。
類只是給對象的創建提供了一個參考的模板而已。
*/
Person zhangSan = new Person("張三", 20, "China");
三、'this'關鍵字
Ⅰ、'this'在類中的作用
-
區別成員變量和局部變量
public class Student { private String name; public void setName(String name) { /* this.name表示類中的屬性,name表示形式參數 */ this.name = name; } }
-
調用類中的其他方法
public class Student { private String name; public void setName(String name) { this.name = name; } public void print() { /* 表示調用當前類中的setName方法。 默認情況下,setName("tom")和this.setName("tom")的效果是一樣的。 */ this.setName("tom"); } }
-
調用類中的其他構造器
public class Student { private String name; public Student() { /* 調用一個參數的構造器,並且參數的類型是String。 注意: this這種調用類中其他構造器的用法,只能在構造器中使用,普通的方法是不能用的。 並且這種調用的代碼只能出現在構造器中的第一句。 */ this("tom"); } public Student(String name) { this.name = name; } }
Ⅱ、'this'在類中的意義
- 'this'關鍵字在類中代表該類將來創建出的對象。
- 'this'關鍵字是在對象的內部來引用對象本身,所以'this'可以調用成員變量和成員方法。
- 同一個類的不同對象都有一個屬於自己的'this'。
示例:
/*
this和person打印的結果是一樣的。
那么其實也就是變量person是從對象的外部來引用對象,而this是在對象的內部來引用對象本身。
*/
public class Person {
private String name;
public Person() {
System.out.println("this = " + this);//this = com.conyoo.test.Person@5674cd4d
}
public static void main(String[] args) {
Person person = new Person();
System.out.println("person = " + person);//person = com.conyoo.test.Person@5674cd4d
}
}
四、對象
Ⅰ、對象和引用的關系
- 使用類類型、數組類型、接口類型聲明出的變量,都可以指向對象,這種變量就是引用類型變量,簡稱引用。
- 引用'指向'對象。本質為引用保存了對象的地址值。
- 在程序中,創建出對象后,直接使用並不方便,所以一般會用一個引用類型的變量去接收這個對象,這個就是所說的引用指向對象。
- 對象和引用的關系,就如電視機和遙控器,風箏和線的關系一樣。
Ⅱ、使用'new'創建與初始化對象
- 使用'new'關鍵字創建與初始化對象的時候,除了分配內存空間之外,還會給創建好的對象進行默認的初始化,以及對類中構造器的調用。
示例:
/*
使用'new'關鍵字創建與初始化對象時程序內部執行的步驟:
1.為對象分配內存空間,將對象的實例變量自動初始化為默認值。
2.如果代碼中實例變量有顯式賦值,那么就將之前的默認值覆蓋掉。
3.調用類中對應的構造器。
4.把對象內存地址值賦值給聲明的變量。
*/
Person person = new Person();
五、構造器
Ⅰ、簡介
- 類中的構造器也稱為構造方法,在進行對象創建的時候必須要調用。
特點:
- 構造方法名必須和類的名字相同。
- 構造方法沒有返回類型,也不能寫void。
作用:
- 使用'new'關鍵字創建對象的時候必須使用類的構造器。
- 構造器中的代碼可以給對象中的屬性進行初始化賦值。
示例:
public class Person {
private String name;
public Person() {
name = "張三";
}
}
Ⅱ、構造器重載
- 除了無參構造器之外,很多時候我們還會使用有參構造器,在創建對象時候可以給屬性賦值。
示例:
public class Person {
private String name;
public Person() {
name = "張三";
}
public Person(String name) {
this.name = name;
}
}
Ⅲ、構造器間的調用
- 使用'this'關鍵字,在一個構造器中,可以調用同一個類中另一個構造器的代碼。
- 'this'的這種用法不會產生新的對象,只是調用了構造器中的代碼而已。一般情況下只有使用'new'關鍵字才會創建新對象。
示例:
public class Person {
private String name;
private Integer age;
public Person() {
this.name = "張三";
this.age = 20;
}
public Person(String name) {
this();
this.name = name;
}
}
Ⅳ、默認構造器
- 在java中,如果我們在編寫類的時候沒有寫構造器,那么java文件在編譯之后也會自動的添加一個無參構造器,這個無參構造器也被稱為默認的構造器。
注意:
- 如果我們手動地編寫了一個構造器,那么編譯后就不會自動添加任何構造器了。
六、屬性
-
屬性,或者叫成員變量,用於定義該類或該類對象包含的數據。
-
屬性作用范圍是整個類體。
-
在定義屬性時可以對其初始化,如果不對其初始化,Java使用默認的值對其初始化。
屬性定義的格式:
/* 修飾符 */ 屬性類型 屬性名 /* = 初始值 */;
屬性調用的格式:
- 對象或對象的引用.屬性名
七、方法
- 方法是類和對象動態行為特征的抽象。
- 方法很類似於面向過程中的函數。
- 面向過程中,函數是最基本單位,整個程序由一個個函數調用組成。
- 面向對象中,整個程序的基本單位是類,方法是從屬於類或對象的。
方法定義的格式:
/* 修飾符 */ /* 返回值類型 */ 方法名 (/* 參數列表 */) /* 異常拋出類型 */{
/* 方法體 */
/* return語句 */
}
對象調用的格式:
- 對象或對象的引用.方法名(參數列表)