Java基礎知識回顧之面對物件基礎理解
阿新 • • 發佈:2018-12-08
Java 物件的引用
說明
- 類的描述是公共特徵,類必須通過物件才可以使用
- 宣告物件指的是未開闢堆的記憶體物件,如果直接是使用此物件,會出現"NullPointerException",物件可以通過關鍵字 new 來進行堆記憶體空間的開闢,
有了堆記憶體引用的物件才稱為例項化物件
- 堆記憶體儲存的是物件中所有屬性的內容,而棧記憶體儲存的是堆記憶體的地址數值(為了簡單理解,才稱棧記憶體儲存的是物件名稱)
- 垃圾空間指的是沒有任何棧記憶體指向的堆記憶體空間,會被
GC(垃圾回收機制)
不定時進行回收
class Book{
// 這種是沒有封裝性
// 由於沒有使用 private 關鍵字來修飾變數所以下面的程式碼可以直接給 類賦值
String title;
double price;
public void getInfo(){
System.out.println("圖書名稱:"+ this.title + ",價格為:"+ this.price);
}
}
public class Test {
public static void main(String[] args) {
// 分別建立兩個 Book 例項, 使用new關鍵字會開闢一個新的 堆記憶體空間
Book bookA = new Book (); // bookA 一個棧記憶體,指向 new 開闢的記憶體空間
Book bookB = new Book(); //
bookA.price = 89.8;
bookA.title = "Java 開發"; // 給 booA 這個物件賦值,
bookB.price = 69.8;
bookB.title = "JSP 開發"; // 給 booB 這個物件賦值
bookA.getInfo();
bookB.getInfo();
// 將 bookA 的地址引用,賦值給 bookB,此時 bookB 之前的賦值會被覆蓋,然後之前的值會被視為 垃圾,會被 GC 回收
bookB = bookA;
bookB.price = 100.1; // 此時 bookA 和 bookB 都是指向同一個 堆記憶體空間, bookB的值改變,那麼 bookA 的資訊也就會跟著變化
bookA.getInfo(); // 圖書名稱:Java 開發,價格為:100.1
}
}
Java構造器
構造方法與普通方法的區別
- 構造方法是在例項化新物件(new)的時候只調用一次
- 普通方法是在例項化物件產生之後可以隨意呼叫多次
在實際工作之中,構造方法的核心作用:在類物件例項化的時候設定屬性的初始化內容。構造方法是為了屬性初始化準備的。
物件的宣告以及例項化的區別
class Book{
public Book(){
System.out.println("*************");
}
}
public class Test {
public static void main(String[] args) {
Book book = null; // 宣告
book = new Book(); // 例項化
}
}
匿名物件
既然有了構造方法的概念,其實就可以根據此方法使用匿名物件。之前定義都是屬於有名物件,所有的物件都給了一個名字。但是這個名字真正使用的時候呼叫的肯定是堆記憶體空間。即:真實的物件都儲存在了堆記憶體空間之中,如果沒有棧指向的物件就被稱為
下面省下了 Book 類,以及 Book 的構造器和 getter 與 setter 方法。
public class Test {
public static void main(String[] args) {
// 沒有名聲一個棧物件的名字指向,Book 就是一個匿名物件
new Book("Java 開發", 200).getInfo();
}
}
由於匿名物件沒有其他物件對其引用,所以只能使用一次,使用過後,就會被視為垃圾,等待 GC 回收