物件和類

從認識的角度考慮是先有物件後有類。物件,是具體的事物。類,是抽象的,是對物件的抽象。

從程式碼執行角度考慮是先有類後又物件。類是物件的模板。

物件:物件是類的一個例項,有狀態和行為。

:類是一個模板,它描述一類物件的行為和狀態。

下圖中男孩(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;//區域性變數
}
}

類的構造方法

  1. 構造方法的名字和類相同,可以有多個構造方法,並且沒有返回值。
  2. 構造方法主要用於為類的物件定義初始化狀態。
  3. 不能直接呼叫構造方法,必須通過關鍵字 new 來自動呼叫,從而建立類的例項
  4. Java的類都要求有構造方法,如果我們沒有自己定義構造方法,Java編譯器會預設提供一個無引數的構造方法。

new 關鍵字的作用

  1. 為物件分配記憶體空間。
  2. 引起物件構造方法的呼叫
  3. 為物件返回一個引用。