finalize方法_final,finally,finalize三者的含义和区别
final表示不可變的,它可以用來修飾類,方法和變量。
當它修飾類的時候表示該類是不能被繼承的,因為抽象類就是用來被繼承的,所以abstract關鍵字和final關鍵字不能共存。
當它修飾方法的時候表示該方法是不能被重寫的。
當它修飾變量的時候表示該變量的值不能發生變化也就是該變量為一個常量。對于用final修飾的變量我們必須在申明它的時候賦值或者是在構造函數中給它賦值。
finally是異常處理中的一個關鍵字,通常的結構是這樣的:
try{ } catch(){ } finally{ },
它一般用于資源釋放,比如我們可以在finally塊中關閉數據庫連接,在這個結構中不管異常有沒有發生finally中的代碼都會執行。
但是finally中的代碼不是一定會被執行。在以下情況下不會執行finally中的代碼:
1. 在進入try塊之前程序發生異常。
2. 在try塊中調用了System.exit(0)終止了虛擬機的運行。
3. 在try塊或catch塊中程序被中斷,比如說死機。
我們再來看下面這個例子:
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++;
}
}
}
程序運行的結果為:1
這個例子中finally中的代碼究竟是在return前還是return后執行的呢?你可能認為是在return 前執行的,我們來看一下程序執行的過程,執行到try塊中的return num的時候num的值1會被作為返回值存放到棧中但是這時程序并不會返回,而是去執行num++,num的值變為2,然后程序返回結束,此時返回的還是棧中的num值1。
我們再來看另一個例子:
public classDemo02 {
public static voidmain(String[] args) {
System.out.println(methd());
}
public static intmethd(){
intnum = 1;
try{
returnnum;
}catch(Exception ex){
return0;
}finally{
return2;
}
}
}
這段程序的運行結果為2
在程序執行到try塊中的return num時將num中的值1作為返回值保存在棧中,然后執行finally塊中的代碼,return 2,此時棧中的返回值變為了2,所以最后的結果為2.
總結一下:
1. finally在try塊和catch塊return執行后,返回前執行。
2. 如果finally中沒有return,則其執行結果不影響try和catch中已確定的返回值。
3. 如果finally中有return,則其執行結果會直接返回。
finalize: 是Object類的一個方法,因為所有的類都繼承自Object類,所以所有的類都有finalize方法。 在垃圾收集器將該對象清除出內存之前會先調用它的finalize方法,做一些內存清理工作,通常這部分內存是非java內存,如socket,finalize只會被調用一次。
如果該文章對你有幫助別忘了 點贊,收藏加關注,你的支持就是我持續更新的動力!
總結
以上是生活随笔為你收集整理的finalize方法_final,finally,finalize三者的含义和区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建城养兵打仗的游戏?
- 下一篇: 军官的老丈人有案底会对军官仕途造成影响吗