1. 程式人生 > 其它 >【小白轉碼】05

【小白轉碼】05

第五章

一、類和物件

1.類與物件的概念

  1. 什麼是物件?

    • 物件:是一個具有特定屬性和行為特徵的具體事物。

  2. 什麼是類?

    • :是一類具有相同特徵的事物的抽象描述,是一組相同屬性行為的物件的集合。

  3. 類與物件的關係

    • 類是對一類事物的描述,是抽象的

    • 物件是一類事物的例項,是具體的

    • 類是物件的模板,物件是類的實體

2.類的定義

類的格式

public class 類名 {
 //成員變數,描述這類事物的屬性
 //成員方法,描述這類事物的行為
}

3.物件的建立與使用

 

建立物件語法格式: 
類名 物件名= new 類名 ();
Person p = new Person();


使用物件的成員,使用“. ”操作:
使用成員變數:物件名.屬性
使用成員方法:物件名.方法名()

4.物件的記憶體分析

堆空間:存放new出來的物件
棧空間:儲存了局部變量表
方法區:儲存了常量、靜態資訊、類資訊等
   

System.out.println(new Student());////Student@7852e922
型別@物件的hashCode值
注:需要重寫String(),才能輸出實體內容。

 

二、成員變數

1. 變數的分類

根據定義位置不同分為:

  • 區域性變數:定義在方法體內或其他區域性區域內的變數(之前所使用的都是main方法中定義的變數,為區域性變數)。

  • 成員變數:定義在類的成員位置,在方法體外,與方法(例如main方法)平行的位置。並且有修飾符修飾。

    根據修飾的不同成員變數又分為:

    • 類變數:或叫靜態變數,有static修飾的成員變數。(後面再講)

    • 例項變數:沒有static修飾的成員變數。

2. 成員變數的宣告

class 類名{
   【修飾符】 資料型別  屬性名;  
}

說明:常用修飾符有public、預設、private、protected、final、static

資料型別可以是任意基本資料型別和引用資料型別。

屬性名即變數名,符合識別符號的命名規則和規範。

3.例項變數

3.1、例項變數的特點
  1. 例項變數的值是屬於某個物件的

    • 必須通過物件才能訪問例項變數

    • 每個物件的例項變數的值是獨立的

  2. 成員變數有預設初始值(同陣列元素預設初始值)

    資料型別 預設值
    byte,short,int,long 0
    float,double 0.0
    char 0或'\u0000'表現為空
    boolean false
    陣列,類,介面等引用型別 null

     

3.2、例項變數的訪問
物件.例項變數

 

3.3、小結:例項變數與區域性變數的區別
  例項變數 區域性變數
宣告的位置 直接宣告在類的成員位置 宣告在方法體中或其他區域性區域內(方法宣告上,構造方法,程式碼塊等)
修飾符 public、private、final等 不能使用訪問許可權修飾符,可以使用final
記憶體載入位置
初始化值 有預設初始化值 無預設初始化值
生命週期 同對象的生命週期 隨著方法的呼叫而存在,方法呼叫完畢即消失

 

4.方法

4.1.概念

方法也叫函式,是一個獨立功能的定義,是一個類中最基本的功能單元。

把一個功能封裝為方法的目的是,可以實現程式碼重用,從而簡少程式碼量。

 

4.2成員方法的分類

根據修飾不同方法主要分為兩類:

  • 例項方法:沒有static修飾的方法,必須通過例項物件來呼叫。

  • 靜態方法:有static修飾的方法,也叫類方法,主要特點是可以由類名來呼叫。(後面再講)

 

4.3 方法的宣告

  1. 方法宣告的位置必須在類中方法外,在類的成員位置

  2. 語法格式

    【修飾符】 返回值型別 方法名(【引數列表 】)【extends fatherclass】【throws 異常列表】{
           方法體;
           【return 返回值;
    }

 

3.例項方法的呼叫格式

物件名.例項方法(【實參列表】) 

4.4 形參與實參的概念理解

  • 形參:在定義方法時方法名後面括號中宣告的變數稱為形式引數(簡稱形參)即形參出現在方法定義時。

  • 實參:呼叫方法時方法名後面括號中的使用的值/變數/表示式稱為實際引數(簡稱實參)即實參出現在方法呼叫時。

 

4.5 方法呼叫的記憶體情況

方法不呼叫不執行,呼叫一次執行一次,每次呼叫會在棧中有一個入棧動作,即給當前方法開闢一塊獨立的記憶體區域,用於儲存當前方法的區域性變數的值,當方法執行結束後,會釋放該記憶體,稱為出棧,如果方法有返回值,就會把結果返回呼叫處,如果沒有返回值,就直接結束,回到呼叫處繼續執行下一條指令。

棧結構特點:先進後出,後進先出。

 

4.6 方法引數的值傳遞機制

方法的引數傳遞機制:實參給形參賦值,那麼反過來形參會影響實參嗎?

  • 方法的形參是基本資料型別時,形參值的改變不會影響實參;

  • 方法的形參是引用資料型別時,形參地址值的改變不會影響實參,但是形參地址值裡面的資料的改變會影響實參,例如,修改陣列元素的值,或修改物件的屬性值。

    • 注意:String、Integer等特殊型別容易錯

4.7 方法的過載 overload

方法過載:同一個類中(本類宣告的或繼承自父類的)的方法,方法名相同,引數列表不同的情況,這就叫方法過載。

引數列表不同:指的是引數個數不同,資料型別不同,資料型別順序不同。

注意:與方法的返回值型別無關

 

4.8 可變形參

在JDK1.5之後,如果我們定義一個方法時,此時某個形參的型別可以確定,但是形參的個數不確定,那麼我們可以使用可變引數。

格式:

【修飾符】 返回值型別 方法名(【非可變引數部分的形參列表,】引數型別... 形參名){  }

注意:

(1)一個方法最多隻能有一個可變引數

(2)如果一個方法包含可變引數,那麼可變引數必須是形參列表的最後一個