finalize方法_final,finally,finalize三者的含义和区别
final表示不可變的,它可以用來(lái)修飾類(lèi),方法和變量。
當(dāng)它修飾類(lèi)的時(shí)候表示該類(lèi)是不能被繼承的,因?yàn)槌橄箢?lèi)就是用來(lái)被繼承的,所以abstract關(guān)鍵字和final關(guān)鍵字不能共存。
當(dāng)它修飾方法的時(shí)候表示該方法是不能被重寫(xiě)的。
當(dāng)它修飾變量的時(shí)候表示該變量的值不能發(fā)生變化也就是該變量為一個(gè)常量。對(duì)于用final修飾的變量我們必須在申明它的時(shí)候賦值或者是在構(gòu)造函數(shù)中給它賦值。
finally是異常處理中的一個(gè)關(guān)鍵字,通常的結(jié)構(gòu)是這樣的:
try{ } catch(){ } finally{ },
它一般用于資源釋放,比如我們可以在finally塊中關(guān)閉數(shù)據(jù)庫(kù)連接,在這個(gè)結(jié)構(gòu)中不管異常有沒(méi)有發(fā)生finally中的代碼都會(huì)執(zhí)行。
但是finally中的代碼不是一定會(huì)被執(zhí)行。在以下情況下不會(huì)執(zhí)行finally中的代碼:
1. 在進(jìn)入try塊之前程序發(fā)生異常。
2. 在try塊中調(diào)用了System.exit(0)終止了虛擬機(jī)的運(yùn)行。
3. 在try塊或catch塊中程序被中斷,比如說(shuō)死機(jī)。
我們?cè)賮?lái)看下面這個(gè)例子:
public class Demo02 {public static void main(String[] args) {
System.out.println(methd());
}public static int methd(){int num = 1;try{return num;
}catch (Exception ex){return 0;
}finally {
num++;
}
}
}
程序運(yùn)行的結(jié)果為:1
這個(gè)例子中finally中的代碼究竟是在return前還是return后執(zhí)行的呢?你可能認(rèn)為是在return 前執(zhí)行的,我們來(lái)看一下程序執(zhí)行的過(guò)程,執(zhí)行到try塊中的return num的時(shí)候num的值1會(huì)被作為返回值存放到棧中但是這時(shí)程序并不會(huì)返回,而是去執(zhí)行num++,num的值變?yōu)?,然后程序返回結(jié)束,此時(shí)返回的還是棧中的num值1。
我們?cè)賮?lái)看另一個(gè)例子:
public classDemo02 {
public static voidmain(String[] args) {
System.out.println(methd());
}
public static intmethd(){
intnum = 1;
try{
returnnum;
}catch(Exception ex){
return0;
}finally{
return2;
}
}
}
這段程序的運(yùn)行結(jié)果為2
在程序執(zhí)行到try塊中的return num時(shí)將num中的值1作為返回值保存在棧中,然后執(zhí)行finally塊中的代碼,return 2,此時(shí)棧中的返回值變?yōu)榱?,所以最后的結(jié)果為2.
總結(jié)一下:
1. finally在try塊和catch塊return執(zhí)行后,返回前執(zhí)行。
2. 如果finally中沒(méi)有return,則其執(zhí)行結(jié)果不影響try和catch中已確定的返回值。
3. 如果finally中有return,則其執(zhí)行結(jié)果會(huì)直接返回。
finalize: 是Object類(lèi)的一個(gè)方法,因?yàn)樗械念?lèi)都繼承自O(shè)bject類(lèi),所以所有的類(lèi)都有finalize方法。 在垃圾收集器將該對(duì)象清除出內(nèi)存之前會(huì)先調(diào)用它的finalize方法,做一些內(nèi)存清理工作,通常這部分內(nèi)存是非java內(nèi)存,如socket,finalize只會(huì)被調(diào)用一次。
如果該文章對(duì)你有幫助別忘了 點(diǎn)贊,收藏加關(guān)注,你的支持就是我持續(xù)更新的動(dòng)力!
總結(jié)
以上是生活随笔為你收集整理的finalize方法_final,finally,finalize三者的含义和区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 建城养兵打仗的游戏?
- 下一篇: java api csdn_java a