JVM記憶體結構,封裝性的體現,可變個數形參的方法,java的值傳遞機制,關鍵字:this,JDK中的主要包介紹 ...
本博客隨筆主要記錄本人學習過程中的知識,歡迎大家一同學習,有不對的地方很高興讀者能詳細指出,感激不盡!
JVM記憶體結構
編譯完源程式以後,生成一個或多個位元組碼文件。
我們使用JVM中的類的載入器和解釋器對生成的位元組碼文件進行解釋運行。意味著,需要將位元組碼文件對應的類載入到記憶體中,涉及到記憶體解析。
虛擬機棧:即為平時提到的棧結構。我們將局部變數存儲在棧結構中。
堆:我們將new出來的結構(比如:數組、對象)載入在對空間中。補充:對象的屬性(非static的)載入在堆空間中。
方法區:類的載入信息、常量池、靜態域。
封裝性的體現
下麵列舉4種體現,還有許多其它體現:
- 將類的屬性xxx私有化(private),同時,提供公共的(public)方法來獲取(getXxx)和設置(setXxx)此屬性的值。
- 不對外暴露私有的方法。
- 單例模式中(將構造器私有化)。
- 將類設置為預設的,使其不在包外被調用。
可變個數形參的方法
具體使用:
- 可變個數形參的格式:數據類型 ... 變數名。
- 當調用可變個數形參的方法時,傳入的參數個數可以是:0個,1個,2個,... 。
- 可變個數形參的方法與本類中方法名相同,形參不同的方法之間構成重載。
- 可變個數形參的方法與本類中方法名相同,形參類型也相同的數組之間不構成重載。換句話說,二者不能共存。
- 可變個數形參在方法的形參中,必須聲明在末尾。
- 可變個數形參在方法的形參中,最多只能聲明一個可變形參。
java的值傳遞機制
- 針對於方法內變數的賦值:
如果變數是基本數據類型,此時賦值的是變數所保存的數據值。
如果變數是引用數據類型,此時賦值的是變數所保存的數據的地址值。 - java中參數傳遞機制:
值傳遞
如果參數是基本數據類型,此時實參賦給形參的是實參真實存儲的數據值。
如果參數是引用數據類型,此時實參賦給形參的是實參存儲數據的地址值。
關鍵字:this
- 可以調用的結構有:屬性、方法和構造器。
- 關於this調用屬性、方法:
this理解為:當前對象或當前正在創建的對象。
2.1 在類的方法種,我們可以使用“this.屬性”或“this.方法”的方式,調用當前對象屬性或方法。但是,
① 通常情況下,我們都選擇省略“this.”,特殊情況下,如果方法的形參和類的屬性同名時,則我們必須顯示出來。
② 使用“this.變數”的方式,錶面此變數是屬性,而非形參。
2.2 在類的構造器中,我們可以使用“this.屬性”或“this.方法”的方式,調用當前正在創建的對象屬性或方法。但是
① 通常情況下,我們都選擇省略“this.”,特殊情況下,如果構造器的形參和類的屬性同名時,則我們必須顯示出來。
② 使用“this.變數”的方式,錶面此變數是屬性,而非形參。 - this調用構造器:
① 我們在類的構造器中,可以顯式的使用"this(形參列表)"方式,調用本類中指定的其他構造器。
② 構造器中不能通過"this(形參列表)"方式調用自己。
③ 如果一個類中有n個構造器,則最多有 n - 1構造器中使用了"this(形參列表)"。
④ 規定:"this(形參列表)"必須聲明在當前構造器的首行。
⑤ 構造器內部,最多只能聲明一個"this(形參列表)",用來調用其他的構造器。
JDK中的主要包介紹
import的使用
import:導入
- 在源文件中顯式的使用import結構導入指定包下的類、介面。
- 聲明在包的聲明和類的聲明之間。
- 如果需要導入多個結構,則併列寫出即可。
- 可以使用"xxx.*"的方式,表示可以導入xxx包下的所結構。
- 如果使用的類或介面是java.lang包下定義的,則可以省略import結構。
- 如果使用的類或介面是本包下定義的,則可以省略import結構。
- 如果在源文件中,使用了不同包下的同名的類,則必須至少一個類需要以全類名的方式顯示。
- 使用"xxx.*"方式表明可以調用xxx包下的所結構。但是如果使用的是xxx子包下的結構,則仍需要顯式導入。
- import static:導入指定類或介面中的靜態結構:屬性或方法。