《Java編程思想》中有一段關於對象的說法:
“按照通俗的說法,每個對象都是某個類(class)的一個實例(instance),這裏,‘類’就是‘類型’的同義詞。”
簡單來說,對象就是類的實例。舉個栗子:“人類”包括了所有的人,在面向對象裏,“人類”就是一個類,而人類中的某個人,比如特朗普,他就是人類的實例,他就是一個對象。
還是《Java編程思想》中關於引用的說法,畢竟是經典的Java書籍:
“每種編程語言都有自己的數據處理方式。有些時候,程序員必須注意將要處理的數據是什麼類型。你是直接操縱元素,還是用某種基於特殊語法的間接表示(例如C/C++裏的指針)來操作對象。所有這些在 Java 裏都得到了簡化,一切都被視爲對象。因此,我們可採用一種統一的語法。儘管將一切都“看作”對象,但操縱的標識符實際是指向一個對象的“引用”(reference)。”
1 Student student;
2 student = new Student("路飛");
Java在創建對象的時候是通過關鍵字new來進行的,結果是在堆中創建了一個新的對象。所以這兩行中 new Student("路飛")纔是創建對象的操作,那麼,student並不是一個對象,而是一個指向對象的引用,這個指向的對象是通過new Student("路飛")來創建的。
一個引用可以指向多個對象,而一個對象可以被多個引用所指向
舉例:
Student student;
student = new Student("娜美");
student = new Student("索隆");
Student student1 = new Student("山治");
Student student2 = student1;
分析:引用student可以指向多個不同的對象,指向的對象通過new來創建;
而通過new Student("山治")創建的對象可以被student1和student2同時指向。
來一個前幾天遇到的(用學生班級進行模擬,與遇到的類似)
@Test
public void objectTest() {
List<Student> students = new ArrayList<Student>();
students.add(new Student("路飛"));
Class_ class_ = new Class_();
class_.setStudents(students);
List<Student> s = class_.getStudents();
s.add(new Student("山治"));
System.out.println();
}
說明:Class_類表示的是班級類,Student表示的是學生類,兩者之間的關係:一個班級中有多個學生,所以Class_中含有變量students: private List<Student> students; (設置好get和set方法,再簡單不過了)
對上面的測試代碼進行調試:
可以看出:students, s, 還有班級類中的學生,指向的都是相同的對象,對這幾個引用進行操作,會同步,因爲都指向的是相同的對象嘛。