面向?qū)ο?/h2>


?1. 垃圾回收機制

垃圾回收機制:內(nèi)存對象的管理,包括對象空間的分配和釋放。

對象空間的分配:使用new關(guān)鍵字創(chuàng)建對象即可

對象空間的釋放:將對象賦值null即可。垃圾回收器將負責回收所有”不可達”對象的內(nèi)存空間。

算法核心:1.發(fā)現(xiàn)無用的對象

? ? ? ? ? ? ? ? ? 2.回收無用對象占用的內(nèi)存空間

垃圾回收機制保證可以將“無用的對象”進行回收。無用的對象指的就是沒有任何變量引用該對象。Java的垃圾回收器通過相關(guān)算法發(fā)現(xiàn)無用對象,并進行清除和整理。

垃圾回收的相關(guān)算法

1.引用計數(shù)法

注意:這個方法的局限性在于:循環(huán)引用的無用對象”無法別識別。

舉例:

s1和s2互相引用對方,導(dǎo)致他們引用計數(shù)不為0,但是實際已經(jīng)無用,但無法被識別。

2.引用可達法(比較常用)

通用的分代垃圾回收機制

基于的事實:不同的對象的生命周期是不一樣的。因此不同生命周期的對象可以采取不同的回收算法,以便提高回收效率。

將對象分為三種狀態(tài):

1.年輕代

操作最頻繁,會盡可能收集生命周期短的對象,當“年輕代”區(qū)域存放滿對象后,就將對象存放到年老代區(qū)域。

2.年老代

年老代存放的都是生命周期比較長的對象

3.持久代

用于存放靜態(tài)文件,如Java類、方法等。持久代對垃圾回收沒有顯著影響。

垃圾回收過程:

1、新創(chuàng)建的對象,絕大多數(shù)都會存儲在Eden中,

? ? 2、當Eden滿了(達到一定比例)不能創(chuàng)建新對象,則觸發(fā)垃圾回收(GC),將無用對象清理掉,

???????????然后剩余對象復(fù)制到某個Survivor中,如S1,同時清空Eden區(qū)

? ? 3、當Eden區(qū)再次滿了,會將S1中的不能清空的對象存到另外一個Survivor中,如S2,

? ? ? ? ??同時將Eden區(qū)中的不能清空的對象,也復(fù)制到S1中,保證Eden和S1,均被清空。

4、重復(fù)多次(默認15次)Survivor中沒有被清理的對象,則會復(fù)制到老年代Old(Tenured)區(qū)中,

? ? 5、當Old區(qū)滿了,則會觸發(fā)一個一次完整地垃圾回收(FullGC),之前新生代的垃圾回收稱為(minorGC)

2.This 關(guān)鍵字

this 關(guān)鍵字:代表當前對象本身(對當前對象的引用 -------->當前對象的引用地址)

用法:

1.使用this關(guān)鍵字區(qū)分局部變量和成員變量

2.使用this 關(guān)鍵字訪問當前對象的屬性和方法(this可以省略)

3.使用this關(guān)鍵字調(diào)用構(gòu)造方法,必須要放在構(gòu)造方法的第一行

注意:this關(guān)鍵字不能與static關(guān)鍵字結(jié)合使用

實際操作:

3.Static 關(guān)鍵字

static關(guān)鍵字的重點在于它是靜態(tài)修飾的標志


可以使用static修飾成員變量------>類變量(靜態(tài)成員變量),從屬于類,在類加載時(創(chuàng)建對象之前)對該變量進行初始化,所有對象共享一份靜態(tài)成員變量。

可以使用static修飾方法----->類方法(靜態(tài)方法),從屬于類

可以使用Static修飾代碼塊-------->靜態(tài)代碼塊,在類加載時(創(chuàng)建對象之前)

使用Static修飾內(nèi)部類:靜態(tài)內(nèi)部類。

注意:static修飾的方法或靜態(tài)塊中不能訪問非static修飾的成員或方法。

實際操作:

運行效果:

4.靜態(tài)初始化塊

用于類的初始化操作,在靜態(tài)初始化塊中不能直接訪問非static成員。

注意:靜態(tài)初始化塊中所執(zhí)行的內(nèi)容都是直接執(zhí)行。

5.參數(shù)傳值機制

兩種傳遞類型:

1、基本數(shù)據(jù)類型參數(shù)的傳值

傳遞的是值的副本。副本改變不會影響原件

2、引用類型參數(shù)的傳值

傳遞的是值的副本。但是引用類型指的是“對象的地址”。因此,副本和原參數(shù)都指向了同一個“地址”,改變“副本指向地址對象的值,也意味著原參數(shù)指向?qū)ο蟮闹狄舶l(fā)生了改變”。

實際操作

6.Package包

作用:Package包的作用是實現(xiàn)對類的管理

JDK的常見包有:

java.lang:包含一些Java語言的核心類,如String,Math,Integer,System和Thread,提供常用的功能。

Java.awt:包含了構(gòu)成抽象窗口工具集的多個類,這些類被用來構(gòu)建和管理應(yīng)用程序的圖形用戶界面(GUI)。

java.net:包含執(zhí)行與網(wǎng)絡(luò)相關(guān)的操作的類。

Java.io:包含能提供多種輸入/輸出功能的類。


java.util:包含一些實用工具類,如定義系統(tǒng)特性、使用與日期日歷相關(guān)的函數(shù)。


實際操作:


7.導(dǎo)入類的import和靜態(tài)導(dǎo)入

注意要點:

  1. Java會默認導(dǎo)入java.lang包下所有的類,因此這些類我們可以直接使用。

  2. 如果導(dǎo)入兩個同名的類,只能用包名+類名來顯示調(diào)用相關(guān)類

靜態(tài)導(dǎo)入:

用于導(dǎo)入指定類的靜態(tài)屬性,這樣我們可以直接使用靜態(tài)屬性。

實際操作:

8.繼承的實現(xiàn)

繼承:一個子類通過繼承語句extends能夠獲得父類的屬性和方法后進行調(diào)用的過程

特點:使用extends,一個類只能繼承一個父類

能夠避免出現(xiàn)過多重復(fù)的語句,簡化過程

現(xiàn)實世界中一直都存在各種繼承關(guān)系

實際操作:

執(zhí)行結(jié)果:

在這個例子當中,student類就繼承到了person類里的全部屬性和方法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容