日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java笔记——Java代码块的执行顺序

發布時間:2024/4/11 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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代码块的执行顺序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。