Java牛角尖【003】:类初始化时的执行顺序
?? 在初始化一個(gè)類時(shí),到底是先執(zhí)行哪一部分,總體的執(zhí)行順序是什么樣的呢,同樣,當(dāng)類被釋放時(shí),又是怎樣一個(gè)順序呢?先來看下面的代碼好了。
?
package net.moon.insignificant.commonclass; class CommonSubClass extends CommonSupperClass { static { System.out.println("Common sub static initial"); } public CommonSubClass() { System.out.println("Common sub construct"); } @Override protected void finalize() throws Throwable { // TODO Auto-generated method stub System.out.println("Common sub finalize"); super.finalize(); } } abstract class CommonSupperClass { public CommonSupperClass() { System.out.println("Common super construct"); } static { System.out.println("Common supper static initial"); } @Override protected void finalize() throws Throwable { // TODO Auto-generated method stub System.out.println("Common supper finalize"); super.finalize(); } } public class Demo { public static void main(String[] args) { // TODO Auto-generated method stub CommonSubClass css = new CommonSubClass(); css = null; System.gc(); } }
? 只要運(yùn)行上面的代碼,結(jié)果如下:
Common supper static initial Common sub static initial Common super construct Common sub construct Common sub finalize Common supper finalize
? 其實(shí)大家已經(jīng)清楚,在初始化時(shí),執(zhí)行的順序是:
1.? 父類的靜態(tài)代碼塊
2. 子類的靜態(tài)代碼塊
3. 父類的構(gòu)造方法
4. 子類的構(gòu)造方法
?
? 釋放資料時(shí),執(zhí)行的順序是:
1. 子類的finalize方法
2. 父類的finalize方法
?
? 只是這里一個(gè)意外是:竟然父類為抽象類時(shí)也同樣會(huì)調(diào)用父類的構(gòu)造方法,看來抽象類在虛擬機(jī)內(nèi)部還是被實(shí)例化了。
?
? 下一篇: Java牛角尖【004】:Final類可以有protected屬性或方法嗎?
轉(zhuǎn)載于:https://www.cnblogs.com/moonsnow/archive/2009/05/29/6226858.html
總結(jié)
以上是生活随笔為你收集整理的Java牛角尖【003】:类初始化时的执行顺序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学编程的日子里,很多人因迷茫放弃了编程,
- 下一篇: 超级棒的免费前端学习路线