《Java編程思想》中有一段關(guān)于對(duì)象的說法:
“按照通俗的說法植酥,每個(gè)對(duì)象都是某個(gè)類(class)的一個(gè)實(shí)例(instance),這里翔烁,‘類’就是‘類型’的同義詞渺氧。”
簡(jiǎn)單來說蹬屹,對(duì)象就是類的實(shí)例侣背。舉個(gè)栗子:“人類”包括了所有的人,在面向?qū)ο罄锟叭祟悺本褪且粋€(gè)類贩耐,而人類中的某個(gè)人,比如特朗普业筏,他就是人類的實(shí)例憔杨,他就是一個(gè)對(duì)象。
還是《Java編程思想》中關(guān)于引用的說法蒜胖,畢竟是經(jīng)典的Java書籍:
“每種編程語(yǔ)言都有自己的數(shù)據(jù)處理方式。有些時(shí)候抛蚤,程序員必須注意將要處理的數(shù)據(jù)是什么類型台谢。你是直接操縱元素,還是用某種基于特殊語(yǔ)法的間接表示(例如C/C++里的指針)來操作對(duì)象岁经。所有這些在 Java 里都得到了簡(jiǎn)化朋沮,一切都被視為對(duì)象。因此缀壤,我們可采用一種統(tǒng)一的語(yǔ)法樊拓。盡管將一切都“看作”對(duì)象,但操縱的標(biāo)識(shí)符實(shí)際是指向一個(gè)對(duì)象的“引用”(reference)塘慕〗钕模”
1Student student;2student =newStudent("路飛");
Java在創(chuàng)建對(duì)象的時(shí)候是通過關(guān)鍵字new來進(jìn)行的,結(jié)果是在堆中創(chuàng)建了一個(gè)新的對(duì)象图呢。所以這兩行中?new Student("路飛")才是創(chuàng)建對(duì)象的操作条篷,那么骗随,student并不是一個(gè)對(duì)象,而是一個(gè)指向?qū)ο蟮囊酶疤荆@個(gè)指向的對(duì)象是通過new Student("路飛")來創(chuàng)建的鸿染。
一個(gè)引用可以指向多個(gè)對(duì)象,而一個(gè)對(duì)象可以被多個(gè)引用所指向
舉例:
Student student;
student=newStudent("娜美");
student=newStudent("索隆");
Student student1=newStudent("山治");
Student student2= student1;
分析:引用student可以指向多個(gè)不同的對(duì)象乞巧,指向的對(duì)象通過new來創(chuàng)建涨椒;
而通過new Student("山治")創(chuàng)建的對(duì)象可以被student1和student2同時(shí)指向。
來一個(gè)前幾天遇到的(用學(xué)生班級(jí)進(jìn)行模擬绽媒,與遇到的類似)
@TestpublicvoidobjectTest() {
List students =newArrayList();
students.add(newStudent("路飛"));
Class_ class_=newClass_();
class_.setStudents(students);
List s =class_.getStudents();
s.add(newStudent("山治"));
System.out.println();
}
說明:Class_類表示的是班級(jí)類丢烘,Student表示的是學(xué)生類,兩者之間的關(guān)系:一個(gè)班級(jí)中有多個(gè)學(xué)生些椒,所以Class_中含有變量students: ?private List
students; (設(shè)置好get和set方法播瞳,再簡(jiǎn)單不過了)
對(duì)上面的測(cè)試代碼進(jìn)行調(diào)試:
可以看出:students, s, 還有班級(jí)類中的學(xué)生,指向的都是相同的對(duì)象免糕,對(duì)這幾個(gè)引用進(jìn)行操作赢乓,會(huì)同步,因?yàn)槎贾赶虻氖窍嗤膶?duì)象嘛石窑。