更新時(shí)間:2022-04-01 來源:黑馬程序員 瀏覽量:
要想使用一個(gè)類則必須要有對象。在Java程序中可以使用new關(guān)鍵字創(chuàng)建對象,具體格式如下:
類名對象名稱= null; 對象名稱=new 類名();
上述格式中,創(chuàng)建對象分為聲明對象和實(shí)例化對象兩步,也可以直接通過下面的方式創(chuàng)建對象,具體格式如下:
類名對象名稱= new 類名();
例如,創(chuàng)建Student類的實(shí)例對象,示例代碼如下:
Studentstu= newStudent();
上述代碼中,newStudent()用于創(chuàng)建Student類的一個(gè)實(shí)例對象,Studentstu則是聲明了一個(gè)Student類型的變量stu。運(yùn)算符“=”將新創(chuàng)建的Student對象地址賦值給變量stu,變量stu引用的對象簡稱為stu對象。
了解了對象的創(chuàng)建之后,就可以使用類創(chuàng)建對象了,示例代碼如下:
class Student { String name; // 聲明姓名屬性 void read() { System.out.println("大家好,我是" + name + ",我在看書!"); } } public class Test { public static void main(String[] args[]) { Student stu = new Student(); //創(chuàng)建并實(shí)例化對象 } }
上述代碼在main()方法中實(shí)例化了一個(gè)Student對象,對象名稱為stu。使用new關(guān)鍵字創(chuàng)建的對象是在堆內(nèi)存分配空間。stu對象的內(nèi)存分配如圖3-2所示。
圖3-2stu對象的內(nèi)存分配
從圖3-2中可以看出,對象名稱stu保存在棧內(nèi)存中,而對象的屬性信息則保存在對應(yīng)的堆內(nèi)存之中。
創(chuàng)建Student對象后,可以使用對象訪問類中的某個(gè)屬性或方法,對象屬性和方法的訪問通過“.”運(yùn)算符實(shí)現(xiàn),具體格式如下:
對象名稱.屬性名 對象名稱.方法名
接下來通過一個(gè)案例學(xué)習(xí)對象屬性和方法的訪問,如文件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對象 Student stu2 = new Student(); // 創(chuàng)建第二個(gè)Student對象 stu1.name = "小明"; // 為stu1對象的name屬性賦值 stu1.read(); // 調(diào)用對象的方法 stu2.name = "小華"; stu2.read(); } }
文件3-1的運(yùn)行結(jié)果如圖3-3所示。
圖3-3文件3-1的運(yùn)行結(jié)果
在文件3-1中,第2~5行代碼聲明了一個(gè)String類型的name屬性和一個(gè)read()方法,第9~10行代碼創(chuàng)建了stu1對象和stu2對象;第11行代碼為stu1對象name屬性賦值;第12行代碼通過stu1對象調(diào)用read()方法。
第13行代碼為stu2對象name屬性賦值;第14行代碼通過stu2對象調(diào)用read()方法。從圖3-3所示的運(yùn)行結(jié)果可以看出,stu1對象和stu2對象在調(diào)用read()方法時(shí),打印的name值不相同。這是因?yàn)閟tu1對象和stu2對象是兩個(gè)完全獨(dú)立的個(gè)體,它們分別擁有各自的name屬性,對stu1對象的name屬性進(jìn)行賦值并不會影響到stu2對象name屬性的值。為stu1對象和stu2對象中的屬性賦值后,stu1對象和stu2對象的內(nèi)存變化如圖3-4所示。
圖3-4stu1對象和stu2對象中的屬性賦值后的內(nèi)存變化
從圖3-4可以看出,程序分別實(shí)例化了兩個(gè)Student對象stu1和stu2,分別指向各自的堆內(nèi)存空間。