coreJava_3——類和對象

類和對象

定義類

類和對象(object,也被稱為實例,instance),類是抽象的,用來模擬現(xiàn)實事物,可理解為某種概念,而“對象”是類的具體實例。對象是具體的,根據(jù)類的描述創(chuàng)造出來的。

對于一個類定義,可以包含三個最常見的成員:構(gòu)造器、成員變量、方法。類里各成員之間的定義順序無影響,各成員之間可以相互調(diào)用,注意:static修飾的成員不能訪問沒有static修飾的成員。

成員變量用于定義該類或該類的實例所包含的狀態(tài)數(shù)據(jù);
方法用于定義該類或該類的實例的行為特征或者功能實現(xiàn);
構(gòu)造器用于構(gòu)造該類的實例,java通過new關(guān)鍵字來調(diào)用構(gòu)造器,從而返回該類的實例。構(gòu)造器是一個類創(chuàng)建對象的根本途徑,如果一個類沒有構(gòu)造器,這個類將無法創(chuàng)建實例。因此java默認為一個類提供無參構(gòu)造器,但是如果程序員手動提供了構(gòu)造器,系統(tǒng)將不再為該類提供默認構(gòu)造器。

定義成員變量的格式:

[修飾符] 類型 成員變量名 [=默認值];

注:

  • 修飾符可以省略,也可以是public、protected、private、static、final,其中public、protected、private只能用其中一個,可以與static、final組合用
    定義

定義方法的格式:

[修飾符] 方法返回類型 方法名(形參列表){
        //方法體
}

注:

  • 修飾符可以省略,也可以是public、protected、private、static、final,其中public、protected、private只能用其中一個,可以與static、final組合用
  • 如果聲明了返回類型,方法體中必須有一個有效的return語句,該語句返回一個變量或一個表達式,且類型需要與聲明的返回類型一致;
    果果沒有返回類型,需要使用void聲明
    定義構(gòu)造器:
[修飾符] 構(gòu)造器名(形參列表){
        //構(gòu)造器執(zhí)行體
}

注:

  • 修飾符:可以省略,也可以是public、protected、private之一
  • 構(gòu)造器名:必須和類名相同
  • 形參列表:和定義方法的形參列表要求一樣
  • 構(gòu)造器不能定義返回值類型,也不能使用void聲明沒有返回值,否則Java會把構(gòu)造器當(dāng)成方法來處理,就不再是構(gòu)造器了。
    實際上,構(gòu)造器是有返回值的,當(dāng)使用new關(guān)鍵字來掉用構(gòu)造器時,構(gòu)造器返回該類的實例??梢园堰@個類的實例當(dāng)成構(gòu)造器的返回值,因此構(gòu)造器的返回值總是當(dāng)前類,無須定義返回值類型。注意:無需顯式地使用return來返回當(dāng)前類的對象,構(gòu)造器的返回值時隱式的

對象的產(chǎn)生和使用

先創(chuàng)建一個Person類,Person.java

public class Person {
    //定義兩個成員變量
    public String name;
    public int age;
    //定義一個say方法
    public void say(String content) {
        System.out.println(content);
    }
}

PersonTest.java

//使用Person類定義一個Person類型的變量
Person p;
//通過new調(diào)用Person類的構(gòu)造器,返回一個Person實例
//將該實例賦給p變量
p = new Person();
//也可以簡寫成
//Person p = new Person();

注:new Person()這里的括號指的是調(diào)用構(gòu)造器,形參為無參。
類名 對象名=new 類名();
類名 對象名: 這個的解釋是創(chuàng)建名稱為“對象名”的“類名”類
new :這個的解釋是實例化對象
類名() :這個的解釋是無參數(shù)構(gòu)造方法;
new 類名(),就是說以無參數(shù)構(gòu)造方法實例化對象;
類名 對象名=new 類名():用指針的解釋就是以無參數(shù)構(gòu)造方法實例化對象并將這個對象的內(nèi)存引 用賦給“類名”類的“對象名”[引用變量]`

創(chuàng)建對象后可以使用了,主要有:

  • 訪問對象的實例變量
  • 調(diào)用對象的方法(調(diào)用時必須為形參賦值)
    注意:static修飾的方法和成員變量,通過類和實例可以調(diào)用;沒有static修飾,只能通過實例調(diào)用

對象、引用和指針

Person p = new Person();
這行代碼產(chǎn)生了兩部分,p變量,Person對象。在內(nèi)存中,Person類型的變量實際上是一個引用,存在棧內(nèi)存中,指向?qū)嶋H的Person;真正的Person對象存在堆內(nèi)存中。
當(dāng)一個對象被創(chuàng)建成功后,存放在堆內(nèi)存中,java不允許直接訪問堆內(nèi)存中的對象,只能通過該對象的引用操作該對象。Java里的引用相當(dāng)于c里的指針,只是Java把指針進行了封裝,避免開發(fā)者進行繁瑣的指針操作。
堆內(nèi)存里的對象可以有多個引用,即多個引用指向同一個對象。

//將p變量的值賦值給p2變量。這樣p2、p均指向同一個對象
Person p2 = p;

對象的this引用

this關(guān)鍵字總是指向調(diào)用該方法的對象。根據(jù)this出現(xiàn)位置的不同,this作為對象的默認引用,有兩種情形:

  • 構(gòu)造器中引用該構(gòu)造器正在初始化的對象
  • 在方法中引用調(diào)用該方法的對象
    this關(guān)鍵字最大的作用是,讓類中一個方法,訪問該類的另一個方法或?qū)嵗兞俊?br> 示例:Dog.java
public class Dog {
    public void jump() {
        System.out.println("正在執(zhí)行jump方法");
    }
    //run方法需要借助jump方法
    public void run() {
        //使用this引用調(diào)用run方法對象
        //this可以省略
        this.jump();
        System.out.println("正在執(zhí)行run方法");
    }
}

其他對象的一個方法依賴另一個方法的案例,如吃飯方法依賴使用筷子等,java允許對象的一個成員直接調(diào)用另一個成員,也可以省略this前綴。
但是對于static修飾的方法而言,可以使用類來直接調(diào)用,如果使用this關(guān)鍵字,則無法指向合適的對象。即:靜態(tài)成員不能直接訪問非靜態(tài)成員。
`注意:這里要聯(lián)合思考。static是允許用類名和對象調(diào)用的,但實際上不應(yīng)該允許這樣做。在編程中注意不要使用對象實例調(diào)用static修飾的成員變量、方法等,而應(yīng)該使用類

3、創(chuàng)建實例
public static void main(String[] args) {
Teacher gzhu = new Teacher("George Zhu", 30, 10000);
System.out.println("Teacher: " + gzhu.getName());
System.out.println("\tAge: " + gzhu.getAge());
System.out.println("\tSalary: " + gzhu.getSalary());
}

main()方法是Java應(yīng)用程序的入口點,每個Java應(yīng)用程序都是從main()方法開始運行的。作為程序入口的main()方法必須同時符合以下幾個條件:
. 用public static修飾;
. 返回類型為void;
. 方法名為main;
. 參數(shù)類型為String[];
包含main方法的類又叫主程序類。

類創(chuàng)建好之后,通過new關(guān)鍵字創(chuàng)建具體對象。它有以下作用:
. 為對象分配內(nèi)存空間,將對象的實例變量自動初始化為其變量類型的默認值;
. 如實例變量顯示初始化,將初始化值賦給實例變量;
. 調(diào)用構(gòu)造方法;
. 返回對象的引用;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容