Java中的對象和引用

《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, 還有班級類中的學生,指向的都是相同的對象,對這幾個引用進行操作,會同步,因爲都指向的是相同的對象嘛。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章