Java面向对象(七)包、内部类、垃圾回收机制
一、包
package 包名; ?---- 聲明包 ? ?注意: 一個java文件中只能有一句package語句 , ?并且必須放在java文件首行 。?
import 包名; --- 導包
import ?java.util.*; ? ?*是一個通配符,會匹配當前包下所有的類,但不會包括子包下的類
java.lang --- 核心類庫,一個java程序運行之前會先自動把這個包下所有的類加載到方法區。 不需要手動 導入。 (同包類也 不需要手動導入)
java.util --- 工具包
java.io --- 用于傳輸數據
java.nio --- 用于處理高并發
java.net ---- 用于網絡通信
javax ---- java 擴展包
java.sql --- 數據庫交互
org.* ---- 由第三方廠商和一些開源社區提供的包 。
注意: 在自定義包名時 , 不能以java 、 javax 、 org開頭 , 否則jvm會去java原生類中尋找你自定義的類 , 這樣是永遠也找不到的 。?
二、內部類
內部類是封裝的第三種形式(1. 函數、2. 屬性的私有化)
1. 方法內部類
定義在方法內的類。
方法內部類中不能定義靜態 變量和方法,但允許定義靜態常量。
方法內部類不能使用方法的變量,但能使用方法的常量。
方法內部類可以使用外部類的屬性和方法。
方法內部類可以繼承其他類
方法內部類調用外部類的方法 : Outer.this.m() ;
除了當前方法外 , 其他地方都不能使用這個方法內部類 。?
內部類會比外部類先加載 。?
2. 成員內部類
定義在類內方法外
利用外部類對象創建內部類對象
Outer.Inner ? in = new outer().new Inner();
不能定義靜態方法和變量。 但可以定義靜態常量 。 ?
可以是用外部類的方法和屬性
具有成員屬性的特性: 可以被權限修飾符修飾 。?
3.靜態內部類
用static修飾的成員內部類
Outer.Inner in = new Outer.Inner();
可以定義靜態屬性和方法。
和普通類 基本沒有差別
4. 匿名內部類
匿名內部類本質上就是繼承了這個類/實現了這個接口
Class c/*匿名內部類創建的對象*/ = new Class(){
code;//匿名內部類的實體 。
};
有構造函數,單數不能手動定義。
定義在方法內時需要注意的與方法內部類一樣
定義在方法外時,需要注意的與成員內部類一樣。
匿名內類中 必須要重寫 接口\類中的抽象方法 。?
只要一個類可以被繼承 , 就可以出現匿名內部類的形式。?
構造函數可以私有化 。 ?只是在類外不能被繼承 , 在類內可以被內部類繼承 。?
5. 內部接口
定義在類中或接口中的接口默認是靜態的。 理解: 在類定義時不能創建對象 ,要求內部接口要能被直接訪問 , 所以要求內部接口是靜態的 。
接口中可以定義 類,并且默認是靜態,因為接口不能創建對象。 理解: 接口不能創建對象, ?所以要求內部類能直接被訪問 。?
三、垃圾回收機制
1. 對象存儲在堆內存中 , 垃圾回收針對堆內存而言。
當調用構造方法的時候,創建對象,存在堆內存中,因為java中對每種數據類型都明確的給定了大小,所以在創建對象的時候會自動計算大小分配內存(具體的數據都是由基本數據類型組成的)。所以在內存的回收和釋放的時候也是由java自己管理。
對象在堆內存中存儲 , 在使用完成后不會被立即回收 ,而是在 不定時的某個時刻被垃圾回收機制(Grabage collector ---gc)回收 ? , 回收過程程序員不能手動控制。?
2. 一個對象剛創建時是放在新生代的伊甸園區,如果這個對象在棧內存中沒有引用,那么會在掃描的時候被解析,釋放內存;如果經過一次掃描依然沒有釋放內存,會將移入新生代的幸存區,幸存區的掃描平率略低于伊甸園區;如果幸存區經過多次掃描依然沒有被釋放,會被放入老生代,老生代的掃描的頻率遠低于新生代。老生代的對象一旦被回收,可能導致程序的卡頓或崩潰。
3. 在原生的java中新生代要大于老生代 ?, 但是在實際開發中為了提高效率 , ?往往會增大老生代 , 達到降低掃描頻率的目的 。?
4. 垃圾回收的線程優先級是相當相當低的 。?
minor GC(Garbage Collage) 發生在新生代的回收 ---初代回收 ?
full GC 發生在老生帶的回收 ---完全回收
5. 在JDK1.6及以前 , ?java只把內存分為四塊 : 棧 、 堆 、 本地方法棧 、 寄存器 。 而堆中又可以分為:新生代 、 老生代 、 永久帶 ?,JDK1.6之后 把堆中的永久帶獨立出來 形成方法區。 ?現在的內存分塊: 棧 、 堆 、 方法區 、 本地方法棧 、 寄存器 ?。
總結
以上是生活随笔為你收集整理的Java面向对象(七)包、内部类、垃圾回收机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java面向对象(六)接口
- 下一篇: Java常用API(一)Object