1. 程式人生 > >Java筆記(三)訪問控制符等說明

Java筆記(三)訪問控制符等說明

訪問控制符
public private static protected final
static欄位
靜態欄位,最本質的特點就是,他是類的欄位,他不屬於任何一個物件例項。他不儲存在某個物件例項的記憶體區域中,而且儲存在類的記憶體區域的公共儲存單元。
類變數可以直接通過類名直接訪問,也可以通過物件訪問。
final欄位
final就是最終的不可更改的,final宣告的類不能有子類,final方法不能被複寫,final變數不能被修改。
介面
介面可以包含常量定義
type NAME = value;
NAME是變數名,通常都是大寫。
在介面中被定義的是可以被共享的,它和C中的#define和C++中的const定義的常量是一樣的。

欄位變數和區域性變數
前者是在類中,是類的一部分,存在堆中,後者是方法中的變數,區域性變數儲存在棧中。除此之外,兩者生命週期不同,前者自動賦值,後者必須顯式賦值。

另外,Java構造方法有一個問題。
若構造方法內部呼叫別的方法,如果這個方法是虛方法,結果如何?
從語法上來說,是合法的,但有時候會造成事實上的不合理。這是Java構造方法的順序問題,在構造子類時,會首先呼叫父類的構造方法,然後呼叫虛擬函式,由於例項物件沒有被完全建立,所以物件的成員變數有可能是null。可能的話,避免在構造器中呼叫任何方法。

Java的垃圾回收
物件回收是由Java虛擬機器的垃圾回收執行緒來完成的,任何物件都有一個引用計數器,其值為0時,說明該物件可以回收。
若我們沒有規定類的父類,他是繼承自object類的,Object類有finalize方法,可以釋放系統資源。

try( Person p =new Person(...) ) {
    
    }

執行完這段程式碼後,系統會自動呼叫Person.close()。

另外,呼叫System.gc()方法可以要求系統進行垃圾回收,但它也僅僅是建議,在系統空閒時會執行。