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