首頁 > 軟體

JavaSE的類和物件你真的瞭解嗎

2022-03-29 13:00:50

1.基本概念

首先我們需要弄清楚幾個概念:物件導向是什麼、類是什麼、物件又是什麼?還是逐個來說

1.1物件導向

我們常說Java是物件導向的語言,C語言是程式導向的語言,那物件導向是什麼,它和程式導向的區別在哪?

物件導向是解決問題的一種思想,其核心是依靠物件之間的互動來解決事情

至於物件導向和程式導向的區別,假設現在有一道數學題:

程式導向:你自己進行手算,你需要關注套用什麼公式,如何化簡、哪些條件組合可以推出什麼結論等,中間有一個環節出錯都不行

物件導向:你把問題給計算機,讓計算機解決,我們關注的只是人和計算機這兩個物件如何互動

這麼看物件導向好像比程式導向更高階,但其實二者沒有好與壞之分,它們都有自己專門的應用場景,就比如數學考試的時候題目你就只能自己寫( ̄▽ ̄)

1.2類和物件

  • 類:對一個實體的描述
  • 物件:類的範例化

假設你要設計某個東西,類就是你所畫的圖紙,物件則是你通過圖紙造出來的實物;一個類可以產生多個物件

2.類的定義及使用

2.1定義

在定義類的時候需要使用一個關鍵字:class

具體語法如下:

class ClassName {
    field;
    method;
}
  • ClassName:類名
  • field:成員變數
  • method:成員方法

我們現在定義一個類Book,裡面成員變數包括書名、作者和價格,成員方法就是列印所有成員變數

文章後面的概念都會圍繞這個類來進行講解 

2.2類的範例化

在main方法中範例化一個物件用到的關鍵字:new

程式碼如下:

Book book1 = new Book();

之後便可以使用“.”來存取類中的成員變數和成員方法,如下:

之前我們說過Java中的變數都要初始化,類裡面的成員變數也不例外,如果成員變數未初始化,那麼預設是對應的資料型別的0值

整型變數是0,浮點數是0.0,布林型別為false,參照型別為null,char為'u0000' 

3.this參照

3.1存取成員變數

我們現在往類裡面再增加一個方法setBook,用這個方法來對成員變數進行初始化

public void setBook(String name,String author,int price) {
        name=name;
        author=author;
        price=price;
    }

我們再來看一下結果:

 為什麼全部都是0值?

其原因在於方法的引數名和成員變數名相等,形參因為數區域性變數,所以程式認為方法裡面的name等變數全部都是形參

我們只需要將等號左邊的變數加上this就可以解決這個問題

this代表的是當前物件的參照(誰呼叫了this,誰就是當前物件)

上圖中book1呼叫的setBook方法,所以 book1是當前物件,方法中的this.name等變數就相當於告訴程式這個不是方法的形參,而是物件book1的成員變數

3.2存取成員方法

這個比較好理解,就是在方法裡面參照類中的其它方法,但注意一點:參照不能成環

假設setBook裡面參照了show方法,那麼show方法裡面就不能再參照setBook,否則就亂套了

還有一點需要補充:

上面提到過一個類可以產生多個物件,那麼多個物件呼叫同一個方法,程式如何分辨是哪個物件呼叫的?

依舊是this參照

類中的方法起始都有一個隱式的this引數,通過this知道是哪個物件呼叫的方法,也就是說setBook方法其實是有4個引數,如下:

public void setBook(Book this,String name,String author,int price) {
        this.name=name;
        this.author=author;
        this.price=price;
    }

除了存取成員方法外,this還可以呼叫本類其它構造方法,這一點在構造方法中再介紹

3.3this參照的特性

1.只能在成員方法中使用

2.是成員方法的第一個隱藏的引數

3.在成員方法中只能參照當前物件(在物件Book1中使用this就只能參照Book1,不能參照物件Book2)

4.為對應類的型別參照,即哪個物件呼叫就是哪個物件的參照型別

4.構造方法

構造方法也是成員方法,但它比較特殊,物件的初始化除了在main方法中使用“.”一個一個初始化外還可以使用構造方法

在範例化一個物件的時候一定會經過兩個步驟:

  • 分配記憶體
  • 呼叫合適的構造方法

如果使用者沒有寫構造方法,編譯器會預設提供一個不帶引數的構造方法,寫了就呼叫使用者自己寫的構造方法

4.1構造方法的特點

  • 方法名要和類名相同
  • 沒有返回值,即使是寫void也不行
  • 在整個物件的宣告週期內只能呼叫一次
  • 可以過載

我們寫一個構造方法如下:

 public Book(String name, String author, int price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }

那麼初始化物件如下:

4.2this在構造方法中使用

上面提到構造方法可以過載,那麼我們再寫一個沒有引數的構造方法

 public Book() {
   
    }

this在構造方法中可以呼叫其它的構造方法,比如我在沒有引數的構造方法中呼叫上面的有三個引數的構造方法

注意:

  • this同樣不能成環
  • this必須放在構造方法的第一行

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!


IT145.com E-mail:sddin#qq.com