Java培訓教程之物件的建立與使用
本文小千分享Java物件導向中的物件建立與使用。類是物件的抽象,為物件定義了屬性和行為,但類本身既不帶任何資料,也不存在於記憶體空間中。而物件是類的一個具體存在,既擁有獨立的記憶體空間,也存在獨特的屬性和行為,屬性還可以隨著自身的行為而發生改變。接下來演示如何用類建立物件,建立物件之前,必須先宣告物件,其語法格式如下:
類名 物件名;
類是自定義型別,也是一種引用型別,因此該物件名是一個引用變數,預設值為null,表示不指向任何堆記憶體空間。接下來需要對該變數進行初始化,Java使用new關鍵字來建立物件,也稱例項化物件,其語法格式如下:
物件名 = new 類名();
上述示例中,使用new關鍵字在堆記憶體中建立類的物件,物件名引用此物件。宣告和例項化物件的過程可以簡化,其語法格式如下:
類名 物件名 = new 類名();
接下來演示建立Person類的例項物件,具體示例如下:
Person p = new Person();
上述示例中,“Person p”宣告瞭一個Person型別的引用變數,“new Person()”為物件在堆中分配記憶體空間,最終返回物件的引用並賦值給變數p,如圖4.1所示。
圖4.1 物件p在記憶體中的示意圖
物件例項化後,就可以訪問物件的成員變數和成員方法,其語法格式如下:
物件名.成員變數;
物件名.成員方法();
接下來透過一個案例來學習訪問物件的成員變數和呼叫物件的成員方法,如例4-1所示。
例4-1 TestPersonDemo.java
1 class Person {
2 String name; // 宣告姓名屬性
3 int age; // 宣告年齡屬性
4 public void say() { // 定義顯示資訊的方法
5 System.out.println("姓名:"+name+",年齡:"+age);
6 }
7 }
8 public class TestPersonDemo {
9 public static void main(String[] args) {
10 Person p1 = new Person(); // 例項化第一個Person物件
11 Person p2 = new Person(); // 例項化第二個Person物件
12 p1.name = "張三"; // 為name屬性賦值
13 p1.age = 18; // 為age屬性賦值
14 p1.say(); // 呼叫物件的方法
15 p2.say();
16 }
17 }
程式的執行結果如圖4.2所示。
圖4.2 例4-1執行結果
例4-1中,例項化了兩個Person物件,並透過“物件.屬性”的方式為成員變數賦值,透過“物件.方法”的方式呼叫成員方法。從執行結果可發現,變數p1、p2引用的物件同時呼叫了say()方法,但輸出結果卻不相同。這是因為用new建立物件時,會為每個物件開闢獨立的堆記憶體空間,用於儲存物件成員變數的值。因此,對變數p1引用的物件屬性賦值並不會影響變數p2引用物件屬性的值。為了更好地理解,變數p1、p2引用物件的記憶體狀態如圖4.3所示。
圖4.3 物件的記憶體關係
例4-1中沒有為p2物件的成員變數賦值,但從圖4.3中可發現,p2物件的name值為null,age值為0。這是因為在例項化物件時,Java虛擬機器會自動為成員變數進行初始化,根據成員變數的型別賦相對應的初始值。
另外,需要注意的是,一個物件能被多個變數所引用,當物件不被任何變數所引用時,該物件就會成為垃圾,不能再被使用。接下來演示垃圾是如何產生的,如例4-2所示。
例4-2 TestObjectRef.java
1 class Person {
2 String name; // 宣告姓名屬性
3 int age; // 宣告年齡屬性
4 public void say() { // 定義顯示資訊的方法
5 System.out.println("姓名:"+name+",年齡:"+age);
6 }
7 }
8 public class TestObjectRef {
9 public static void main(String[] args) {
10 Person p1 = new Person(); // 例項化第一個Person物件
11 Person p2 = new Person(); // 例項化第二個Person物件
12 p1.name = "張三"; // 為p1物件name屬性賦值
13 p1.age = 18; // 為p1物件age屬性賦值
14 p2.name = "李四"; // 為p2物件name屬性賦值
15 p2.age = 28; // 為p2物件age屬性賦值
16 p2 = p1; // 將p1物件傳遞給p2物件
17 p1.say(); // 呼叫物件的方法
18 p2.say();
19 }
20 }
程式的執行結果如圖4.4所示。
圖4.4 例4-2執行結果
例4-3中,第16行程式碼p2被賦值為p1後,會斷開原有引用的物件,而和p1引用同一物件。因此列印如圖4.6所示結果。此時,p2原有引用的物件不再被任何變數所引用,就成了垃圾物件,不能再被使用,只等待垃圾回收機制進行回收。垃圾產生的過程,如圖4.5所示。
圖4.5 垃圾物件的產生
圖4.5中,首先例項化兩個物件p1和p2,其次分別為p1和p2的屬性賦值,最後將p2從新賦值為p1,p2將斷開原有引用,此時被斷開引用的物件,也不被其他引用變數所引用,就成為垃圾空間,等待被回收。
希望以上的分享能幫到大家!本文來自千鋒教育,轉載請註明出處。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2777736/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java培訓教程之使用Lock取代synchronizedJavasynchronized
- Java培訓教程之JDBC URL結構分析JavaJDBC
- Java培訓教程之this關鍵字講解Java
- 培訓Java與自學Java的差距Java
- 武漢Java培訓教程之JDBC中的常用介面和類JavaJDBC
- Java培訓教程之使用Jsoup實現簡單的爬蟲技術JavaJS爬蟲
- 黑馬程式設計師Java培訓和Android培訓:物件導向程式設計師JavaAndroid物件
- Java培訓:長沙Java培訓機構排名Java
- web應用安全培訓教程之reactWebReact
- Java培訓教程分享:變數與常量Java變數
- Java培訓基礎知識-Java的常量與變數Java變數
- 長沙Java培訓系列教程之實現CAS單點登入上篇Java
- 黑馬程式設計師Java培訓和Android培訓:培訓前奏程式設計師JavaAndroid
- 好程式設計師Java培訓分享Java物件導向概念解析程式設計師Java物件
- java培訓資料Java
- Java培訓筆記Java筆記
- java培訓內容Java
- java 培訓日記Java
- java培訓分享:java培訓架構師學習線路圖Java架構
- 好程式設計師Java培訓分享Java EE與Java的區別程式設計師Java
- 長沙Java培訓機構哪家好?怎麼才能避免Java培訓的坑?Java
- Python培訓基礎教程都教哪些Python
- 黑馬程式設計師Java培訓和Android培訓Java GUI圖形使用者介面程式設計師JavaAndroidGUI
- UI培訓教程之系統圖示如何設計?UI
- Java程式設計師技術培訓需要培訓哪些?Java程式設計師
- java培訓面試技巧分享Java面試
- JAVA要不要培訓Java
- Java培訓教程:Java中的位移運算子!Java
- Java 物件建立的流程Java物件
- 長沙Java培訓:自學Java程式設計有必要報培訓班麼?Java程式設計
- JavaScript物件與建立物件的方式JavaScript物件
- 建立安卓應用的 30 個經驗教訓安卓
- Linux培訓教程之安全的動態磁碟儲存策略(轉)Linux
- UI設計培訓技術教程之字型排版規則UI
- 類與物件的建立物件
- 黑馬程式設計師Java培訓和Android培訓Java技術二程式設計師JavaAndroid
- 我的合肥java培訓學習心得Java
- Java培訓學些什麼?Java