首頁(yè)技術(shù)文章正文

Java中如何創(chuàng)建和使用對(duì)象?

更新時(shí)間:2022-04-01 來(lái)源:黑馬程序員 瀏覽量:

要想使用一個(gè)類(lèi)則必須要有對(duì)象。在Java程序中可以使用new關(guān)鍵字創(chuàng)建對(duì)象,具體格式如下:

類(lèi)名對(duì)象名稱(chēng)= null;
對(duì)象名稱(chēng)=new 類(lèi)名();

上述格式中,創(chuàng)建對(duì)象分為聲明對(duì)象和實(shí)例化對(duì)象兩步,也可以直接通過(guò)下面的方式創(chuàng)建對(duì)象,具體格式如下:

類(lèi)名對(duì)象名稱(chēng)= new 類(lèi)名();

例如,創(chuàng)建Student類(lèi)的實(shí)例對(duì)象,示例代碼如下:

Studentstu= newStudent();

上述代碼中,newStudent()用于創(chuàng)建Student類(lèi)的一個(gè)實(shí)例對(duì)象,Studentstu則是聲明了一個(gè)Student類(lèi)型的變量stu。運(yùn)算符“=”將新創(chuàng)建的Student對(duì)象地址賦值給變量stu,變量stu引用的對(duì)象簡(jiǎn)稱(chēng)為stu對(duì)象。
了解了對(duì)象的創(chuàng)建之后,就可以使用類(lèi)創(chuàng)建對(duì)象了,示例代碼如下:

class Student {
    String name; // 聲明姓名屬性
    void read() {
        System.out.println("大家好,我是" + name + ",我在看書(shū)!");
    }
}
public class Test {
    public static void main(String[] args[]) {
        Student stu = new Student(); //創(chuàng)建并實(shí)例化對(duì)象
    }
}

上述代碼在main()方法中實(shí)例化了一個(gè)Student對(duì)象,對(duì)象名稱(chēng)為stu。使用new關(guān)鍵字創(chuàng)建的對(duì)象是在堆內(nèi)存分配空間。stu對(duì)象的內(nèi)存分配如圖3-2所示。

stu對(duì)象的內(nèi)存分配

圖3-2stu對(duì)象的內(nèi)存分配

從圖3-2中可以看出,對(duì)象名稱(chēng)stu保存在棧內(nèi)存中,而對(duì)象的屬性信息則保存在對(duì)應(yīng)的堆內(nèi)存之中。

創(chuàng)建Student對(duì)象后,可以使用對(duì)象訪問(wèn)類(lèi)中的某個(gè)屬性或方法,對(duì)象屬性和方法的訪問(wèn)通過(guò)“.”運(yùn)算符實(shí)現(xiàn),具體格式如下:

對(duì)象名稱(chēng).屬性名
對(duì)象名稱(chēng).方法名

接下來(lái)通過(guò)一個(gè)案例學(xué)習(xí)對(duì)象屬性和方法的訪問(wèn),如文件3-1所示。

文件3-1Example01.java

class Student {
    String name; // 聲明姓名屬性
    void read() {
        System.out.println("大家好,我是" + name);
    }
}
class Example01 {
    public static void main(String[] args) {
        Student stu1 = new Student(); // 創(chuàng)建第一個(gè)Student對(duì)象
        Student stu2 = new Student(); // 創(chuàng)建第二個(gè)Student對(duì)象
        stu1.name = "小明"; // 為stu1對(duì)象的name屬性賦值
        stu1.read(); // 調(diào)用對(duì)象的方法
        stu2.name = "小華";
        stu2.read();
    }
}

文件3-1的運(yùn)行結(jié)果如圖3-3所示。

創(chuàng)建和使用對(duì)象

圖3-3文件3-1的運(yùn)行結(jié)果

在文件3-1中,第2~5行代碼聲明了一個(gè)String類(lèi)型的name屬性和一個(gè)read()方法,第9~10行代碼創(chuàng)建了stu1對(duì)象和stu2對(duì)象;第11行代碼為stu1對(duì)象name屬性賦值;第12行代碼通過(guò)stu1對(duì)象調(diào)用read()方法。

第13行代碼為stu2對(duì)象name屬性賦值;第14行代碼通過(guò)stu2對(duì)象調(diào)用read()方法。從圖3-3所示的運(yùn)行結(jié)果可以看出,stu1對(duì)象和stu2對(duì)象在調(diào)用read()方法時(shí),打印的name值不相同。這是因?yàn)閟tu1對(duì)象和stu2對(duì)象是兩個(gè)完全獨(dú)立的個(gè)體,它們分別擁有各自的name屬性,對(duì)stu1對(duì)象的name屬性進(jìn)行賦值并不會(huì)影響到stu2對(duì)象name屬性的值。為stu1對(duì)象和stu2對(duì)象中的屬性賦值后,stu1對(duì)象和stu2對(duì)象的內(nèi)存變化如圖3-4所示。

stu1對(duì)象和stu2對(duì)象中的屬性賦值后的內(nèi)存變化

圖3-4stu1對(duì)象和stu2對(duì)象中的屬性賦值后的內(nèi)存變化

從圖3-4可以看出,程序分別實(shí)例化了兩個(gè)Student對(duì)象stu1和stu2,分別指向各自的堆內(nèi)存空間。




猜你喜歡:

面向?qū)ο笾蓄?lèi)和對(duì)象的定義是什么?

Java中的垃圾回收機(jī)制是什么?哪些對(duì)象會(huì)被回收?

Java創(chuàng)建實(shí)例對(duì)象

jvm如何判斷對(duì)象已死?

黑馬程序員Java高級(jí)工程師培訓(xùn)

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!