Java笔记——Java代码块的执行顺序
生活随笔
收集整理的這篇文章主要介紹了
Java笔记——Java代码块的执行顺序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Java代碼塊的執(zhí)行順序
Java程序中代碼塊的執(zhí)行順序對于學習Java的人來說是必不可少需要掌握的。
代碼塊
在Java中,使用{}括起來的代碼被稱為代碼塊。根據(jù)其位置和聲明的不同,可以分為:
- 局部代碼塊
- 構造代碼塊
- 靜態(tài)代碼塊
執(zhí)行順序
首先執(zhí)行靜態(tài)代碼塊
接著執(zhí)行構造代碼塊
最后指向構造方法
靜態(tài)代碼塊 >>> 構造代碼塊 >>>> 構造方法
考慮Java中關于繼承的情況,這子類和父類的執(zhí)行順序稍有變化:
Created with Rapha?l 2.1.2開始執(zhí)行父類靜態(tài)代碼塊子類的靜態(tài)代碼塊父類的構造代碼塊父類的構造方法子類的構造代碼塊子類的構造方法結束當一個類被JVM裝載后各種代碼塊的執(zhí)行順序大致如下:
Created with Rapha?l 2.1.2類被JVM裝載執(zhí)行父類相關的代碼是否有靜態(tài)初始化執(zhí)行靜態(tài)初始化,且只執(zhí)行一次,即使后面再有該類的實例化也不會再執(zhí)行是否有靜態(tài)代碼塊同執(zhí)行靜態(tài)初始化一樣執(zhí)行靜態(tài)代碼塊new語句帶來的實例化,先為成員變量分配空間,并綁定參數(shù)列表,隱式或顯式地執(zhí)行super(),即父類的構造方法執(zhí)行非靜態(tài)代碼塊執(zhí)行本類的構造方法執(zhí)行其他代碼結束yesnoyesno這里的執(zhí)行順序同子類構造中有一個默認的父類構造super()無關,不是執(zhí)行到隱藏的super()才開始初始化父類的,類的初始化是分層初始化,即先初始化父類,再初始化子類,初始化每個類的過程中,進行類的初始化工作,先進行成員變量的初始化,成員變量的初始化順序是:默認初始化,即int為0這種->顯示初始化,例如給int型顯示初始化了值->構造方法初始化,所以是這里執(zhí)行到了構造方法。
但是一定要注意,父類初始化選擇的構造方法卻和子類中super 選擇的構造相關,下面代碼很好的解釋了這點。
測試代碼
package com.chen;public class People {{System.out.println("父類構造代碼塊");}static {System.out.println("父類靜態(tài)代碼塊");}public People() {System.out.println("父類構造代碼塊");}public People(String str){System.out.println("父類含參構造方法");} } package com.chen;public class Student extends People{{System.out.println("子類構造代碼塊");}static {System.out.println("子類靜態(tài)代碼塊");}public Student() {//super(null); System.out.println("子類構造代碼塊");}public static void main(String[] args) {new Student();} }執(zhí)行結果為:
父類靜態(tài)代碼塊 子類靜態(tài)代碼塊 父類構造代碼塊 父類構造代碼塊 子類構造代碼塊 子類構造代碼塊注:
如果取消 super(null); 的注釋,那么執(zhí)行結果會發(fā)生變化,在選擇父類的構造方法的時候會選擇含參構造方法,執(zhí)行結果為:
總結
以上是生活随笔為你收集整理的Java笔记——Java代码块的执行顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot跨域请求
- 下一篇: HashMap排序