物件和類
從認識的角度考慮是先有物件後有類。物件,是具體的事物。類,是抽象的,是對物件的抽象。
從程式碼執行角度考慮是先有類後又物件。類是物件的模板。
物件:物件是類的一個例項,有狀態和行為。
類:類是一個模板,它描述一類物件的行為和狀態。
下圖中男孩(boy)、女孩(girl)、為類(class),而具體的每個人為該類的物件(object):
通過上圖可以定義一個Java類:
/*
定義名為 Boy 的類,該類包含兩個屬性和兩個行為
*/
public class Boy{
String name;//定義了名為 name 的 String型別屬性
int age;//定義了名為 age 的 int型別屬性
void run(){//定義了名為run的行為(方法)
}
void walk(){//定義了名為walk的行為(方法)
}
}
一個類可以包含一下型別變數:
- 區域性變數:在方法、構造方法或者語句塊中定義的變數,變數宣告和初始化都是在方法中,方法結束後變數就會自動銷燬。
- 成員變數:成員變數是定義在類中,方法體之外的變數,這種變數在建立物件的時候例項化,成員變數可以被類中方法、構造方法和特定類的語句塊訪問。
- 類變數:類變數也定義在類中,方法體之外,但必須是static修飾符修飾的變數。
一個類可以擁有多個方法,在上面的例子中:run()、walk()都是Boy類的方法。
構造方法:每個類都有構造方法。如果沒有顯示的為類定義構造方法,Java編譯器將會為該類提供一個預設構造方法。
在建立一個物件的時候,至少要呼叫一個構造方法。構造方法的名稱必須與類同名,一個類可以有多個構造方法。
下面示例,為上面的Boy類定義構造方法:
public class Boy{
String name;
int age;
void run(){
}
void walk(){
}
public Boy(){
//這是最簡單的構造方法
}
public Boy(String name){
//這個構造方法僅有一個引數:name
System.out.println("我的名字是:" + name)
}
}
建立物件:
物件是根據類建立的。在Java中,使用關鍵字 new 來建立一個新的物件。建立物件需要一下三步:
- 宣告:宣告一個物件,包括物件名稱和物件型別。
- 例項化:使用關鍵字 new 來建立一個物件。
- 初始化:使用 new 建立物件時,會呼叫構造方法初始化物件。
下面是一個建立物件的例子:
public class A{
public A(String name){
//這是個只有一個引數的構造方法
System.out.println("我的名字是:" + name);
}
public static void main(String[] args){
A myA = new A("type(光)");//這裡用關鍵字 new 建立物件
}
}
編譯並執行上面程式碼,會列印一下結果:
我的名字是:type(光)
學習筆記:
為什麼Java檔案中只能含有一個public類?
Java程式是從一個 public 類的 main 方法開始執行的,就像 C 程式是從 main() 函式開始執行一樣。只能有一個 public 類是
為了給類裝載器提供方便。一個 public 類只能定義在以它的類名為檔名的檔案中。
每個編譯單元(檔案)都有一個 public 類。因為每個編譯單元都只能有一個公共介面,用 public 類來表現。該介面可以與檔案
名相同(嚴格區分大小寫)。當然一個編譯單元內也可以沒有 public 類。
類變數型別
public class A(){
int age;//成員變數
public static void main(String[] args){
}
}
public class A(){
static int age;//類變數
public static void main(String[] args){
}
}
public class A(){
public static void main(String[] args){
int age;//區域性變數
}
}
類的構造方法
- 構造方法的名字和類相同,可以有多個構造方法,並且沒有返回值。
- 構造方法主要用於為類的物件定義初始化狀態。
- 不能直接呼叫構造方法,必須通過關鍵字 new 來自動呼叫,從而建立類的例項
- Java的類都要求有構造方法,如果我們沒有自己定義構造方法,Java編譯器會預設提供一個無引數的構造方法。
new 關鍵字的作用
- 為物件分配記憶體空間。
- 引起物件構造方法的呼叫
- 為物件返回一個引用。