Java類——類的組成成員、定義、創建和使用

一、定義類

\quad定義類的簡單語法如下:
在這裏插入圖片描述

  • 在上面的語法格式中,修飾符可以是publicfinal中的一個,或者不要也可以。
  • 類可以包含三種最常見的成員:構造器、屬性和方法,三種成員都可以定義0個或多個
  • 類中各成員間可以相互調用,但static修飾的成員不能訪問沒有static修飾的成員
  • 屬性用於定義類或類的實例中所包含的數據,方法則用於定義類或類的實例的行爲特徵或功能實現
  • 構造器用於構造該類的實例,通過new關鍵字來調用構造器,從而返回該類的實例。構造器是一個類創建對象的根本途徑,如果一個類沒有構造器,這個類通常無法創建實例。因此,Java語言提供了一個功能:如果程序沒有爲類編寫構造器,則系統會爲該類提供一個默認的構造器

\quad以上幾條介紹了類的組成的基本情況。接下來介紹類裏面3大基本成員的具體語法格式

1、屬性

\quad屬性用於定義類或類的實例中所包含的數據,其語法格式如下:

[修飾符] 屬性類型 屬性名 [=默認值]
  • 修飾符:可以省略,也可以是public, protected, private, static, final,其中public, protected, private三個最多隻能出現一個,可以與static, final組合起來修飾屬性。例如
public int a = 0;
protected double f;
float e = 1.0;
public static int d = 2;
  • 屬性類型:可以是Java語言允許的任何數據類型,包括8個基本類型和引用類型(數組、類等)
  • 屬性名:合法的標識符即可
  • 默認值:可以給定一個合法的默認值,也可以不給定,在創建具體實例時按情況給定

\quad屬性是一種比較傳統、也比較符合漢語習慣的說法,在Java官方說法裏面,屬性被稱爲Field,因此有的地方也將屬性翻譯爲字段

2、方法

\quad定義方法的語法格式如下:

[修飾符] 方法返回值類型 方法名(形參列表)
{
	// 由0條到多條可執行語句組成的方法體
}
  • 修飾符:可以省略,也可以是public, protected, private, static, final,其中public, protected, private三個最多隻能出現一個,可以與static, final組合起來修飾屬性。例如
public static void main(String[] args)
static int getMax(int a, int b)
private float getMax(float a, float b)
  • 方法的返回值類型:可以是ava語言允許的任何數據類型,包括8個基本類型和引用類型(數組、類等);如果聲明瞭方法的返回值類型,則方法體內必須有return語句返回一個變量或者表達式,且這個變量或者表達式的類型必須與方法聲明的類型匹配。若一個方法沒有返回值,則須使用void來聲明
  • 形參列表:用於定義該方法可以接受的參數,多個參數間需用,隔開

\quadstatic是一個特殊的關鍵字,它可以用於修飾方法、屬性等成員。static修飾的成員表明它是這個類共有的,而不是屬於該類的某個實例,因此通常把static修飾的屬性和方法也稱爲類屬性、類方法;不適用其修飾的方法和屬性稱爲實例屬性和實例方法。

3、構造器

\quad構造器語法格式如下:

[修飾符]  構造器名(形參列表)
{
	// 由0條到多條可執行語句組成的構造器執行體
}
  • 修飾符:可以省略,也可以是public, protected, private中的一個
  • 構造器名:必須與類名相同
  • 形參列表:同方法的形參列表

\quad需注意:構造器不能定義返回值類型聲明,也不能使用void定義構造器沒有返回值。
\quad以上,我們就介紹完了Java中類的定義,都是文字不易理解,接下來我們通過簡單的程序例子進行講解。
\quad首先我們定義一個Person類:

public class Person {
    public int age;
    public double height;
    public void info()
    {
        System.out.println("我的年齡是: " + age + ", 我的身高是: " + height);
    }
}

\quad顯然,這個類不含構造函數,則系統會給他提供一個默認的構造函數,系統提供的構造函數是沒有參數的。調用的時候使用new關鍵字,這樣調用即可:

Person Cheng = new Person();

\quadstatic修飾的方法或屬性,既可以通過類來調用,也可以通過實例來調用,沒有使用static修飾的方法或屬性,則只能通過實例調用。上面的程序中屬性和方法均沒有用static修飾,我們可以用Cheng這個實例來調用:

Person Cheng = new Person();
Cheng.age = 23;
Cheng.height = 172.0;
Cheng.info();

\quad運行這個程序,就可以得到如下輸出:

我的年齡是: 23, 我的身高是: 172.0

4、對象的this引用

\quadJava提供了一個this關鍵字,是一個對象的默認引用,this關鍵字總指向調用該方法的對象。根據this出現的位置不同,分爲兩種情形:

  • 構造器中使用this
    下面給出一個實例
public class Person {
    public int age;
    public double height;
    public Person(int age, int height)
    {
        this.age = age;
        this.height = height;
    }
    public void info()
    {
        System.out.println("我的年齡是: " + age + ", 我的身高是: " + height);
    }
}

在調用的時候,可以在構造函數內直接傳入ageheight值進行初始化,下面即爲其調用示例:

 Person Cheng = new Person(22, 172);
 Cheng.info();
  • 方法中使用this
public class Person {
    public int age;
    public double height;
    public Person(int age, int height)
    {
        this.age = age;
        this.height = height;
    }
    public void info()
    {
        System.out.println("我的年齡是: " + age + ", 我的身高是: " + height);
    }
    public void say()
    {
        this.info();
        System.out.println("這就是我");
    }
}

上述程序在say方法內調用info方法,這種情況下直接使用this即可,而不需要通過創建對象再調用info方法,這樣的話可以避免重複創建同一對象,且寫法更簡潔。
\quad在現實世界裏,對象的一個方法依賴於另一個方法的情況很常見,因此,Java允許對象的一個成員直接調用另一個成員,可以省略this,即上述程序中say方法中省略this也是可以的。
\quad對於static修飾的方法而言,則可以直接使用類來直接調用該方法。如果在static修飾的方法中使用this關鍵字,則這個關鍵字就無法指向合適的對象,所以,static修飾的方法中不能使用this引用。由於static修飾方法中不能使用this引用,所以static修飾方法中不能訪問不適用static修飾的普通成員,例如面的程序就會出錯:

public class test {
    public void info()
    {
        System.out.println("測試下啦~");
    }
    public static void main(String[] args){
        info();
    }
}

在這裏插入圖片描述
\quad如果確實需要在靜態方法中訪問另一個普通方法,則只能重新創建一個對象。

public class test {
    public void info()
    {
        System.out.println("測試下啦~");
    }
    public static void main(String[] args){
        test t = new test();
        t.info();
    }
}

\quadthis作爲對象的默認引用使用時,程序可以像訪問普通引用變量一樣來訪問這個this引用,甚至可以把this當成普通方法的返回值,如下程序:

public class test {
    public int age = 20;
    public test grow()
    {
        age++;
        return this;
    }
    public static void main(String[] args){
        test t = new test();
        t.grow().grow().grow();
        System.out.println("我現在已經"+ t.age + "歲啦~");
    }
}
我現在已經23歲啦~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章