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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java调用类中的静态变量时类中静态代码块什么情况会执行以及类的初始化问题?

發(fā)布時間:2024/8/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java调用类中的静态变量时类中静态代码块什么情况会执行以及类的初始化问题? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

類從被加載到虛擬機(jī)內(nèi)存中開始,到卸載出內(nèi)存為止,它的整個生命周期包括:加載、驗(yàn)證、準(zhǔn)備、解析、初始化、使用和卸載七個階段。
類初始化是類加載過程的最后一個階段,到初始化階段,才真正開始執(zhí)行類中的Java程序代碼。虛擬機(jī)規(guī)范嚴(yán)格規(guī)定了有且只有5種情況必須立即對類進(jìn)行初始化:

第一種:遇到new、getstatic、putstatic、invokestatic這四條字節(jié)碼指令時,如果類還沒有進(jìn)行過初始化,則需要先觸發(fā)其初始化。生成這四條指令最常見的Java代碼場景是:使用new關(guān)鍵字實(shí)例化對象時、讀取或設(shè)置一個類的靜態(tài)字段(static)時(被static修飾又被final修飾的,已在編譯期把結(jié)果放入常量池的靜態(tài)字段除外)、以及調(diào)用一個類的靜態(tài)方法時。
第二種:使用Java.lang.refect包的方法對類進(jìn)行反射調(diào)用時,如果類還沒有進(jìn)行過初始化,則需要先觸發(fā)其初始化。
第三種:當(dāng)初始化一個類的時候,如果發(fā)現(xiàn)其父類還沒有進(jìn)行初始化,則需要先觸發(fā)其父類的初始化。
第四種:當(dāng)虛擬機(jī)啟動時,用戶需要指定一個要執(zhí)行的主類,虛擬機(jī)會先執(zhí)行該主類。
第五種:當(dāng)使用JDK1.5支持時,如果一個java.langl.incoke.MethodHandle實(shí)例最后的解析結(jié)果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且這個方法句柄所對應(yīng)的類沒有進(jìn)行過初始化,則需要先觸發(fā)其初始

執(zhí)行代碼:

package com.spring.partise;import java.util.Random;class A{static final int numA = Main.rand.nextInt(100);static{System.out.println("I am A");} } class B{static final int numB = 2;static{System.out.println("I am B");} } class C{static int numC = 3;static{System.out.println("I am C");} } public class Main {static Random rand = new Random();public static void main(String[] args) throws Exception {System.out.println("---------------------------");System.out.println(A.numA);//會執(zhí)行static中的方法System.out.println("---------------------------");System.out.println(B.numB);//不會執(zhí)行static中的方法System.out.println("---------------------------");System.out.println(C.numC);} }

執(zhí)行結(jié)果:

--------------------------- I am A 22 --------------------------- 2 --------------------------- I am C 3

總結(jié):如果一個static final值是“編譯期常量”,就像static final int numB = 2;那樣,那么這個值不需要對B類進(jìn)行初始化就可以讀取。但是,如果只是將一個域設(shè)置為static和final的,那不一足以確保這種行為,例如,對static final int numA = Main.rand.nextInt(100);的訪問將強(qiáng)制進(jìn)行類的初始化,因?yàn)樗皇且粋€編譯期常量。
如果一個static 域不是final,那么在對它訪問時,總是要求在它被讀取之前,要先進(jìn)行鏈接(為這個域分配存儲空間)和初始化(初始化該存儲空間)就像static int numC = 3;那樣!!!

總結(jié)

以上是生活随笔為你收集整理的java调用类中的静态变量时类中静态代码块什么情况会执行以及类的初始化问题?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 少妇被狂c下部羞羞漫画 | 色图自拍 | 波多野吉衣一二三区乱码 | 乱lun合集小可的奶水 | 自拍偷拍 国产 | 亚洲一区二区三区免费 | 久久精品久久久久 | 黄色aa视频 | 人人超碰97| 国产婷婷色一区二区三区 | 国产成人精品一区二区三区在线观看 | 少妇又紧又深又湿又爽视频 | 精品乱子一区二区三区 | 日韩一道本 | 欧美视频在线观看视频 | 岛国精品资源网站 | b站大片免费直播 | 成人免费一级 | 欧美午夜一区二区三区 | 欧美视频不卡 | 国产成人精品免费在线观看 | 色综合天天综合网天天狠天天 | 国产成人精品一区二三区四区五区 | 精品动漫一区二区三区在线观看 | 中文字幕在线官网 | 男女又爽又黄 | 热热99| 欧美人妻精品一区二区免费看 | 明星双性精跪趴灌满h | 国产精品久久久久久人妻精品动漫 | 国产成人无码一区二区在线观看 | 日韩毛片在线 | 午夜快播 | 丁香六月综合激情 | 国产美女特级嫩嫩嫩bbb | 青青草在线播放 | 国产精品白浆一区二小说 | 好看的av网址 | 人体私拍套图hdxxxx | 黄视频免费在线观看 | 久久视 | 国产精品99久久久久久动医院 | 久久国产精品一区 | 黄色av片三级三级三级免费看 | 高清av免费观看 | 人妻视频一区二区三区 | 国产天堂久久 | 高清一区在线观看 | 自拍偷拍 国产 | 亚洲一区二区影视 | 欧美一级特黄aaaaaa | 男女污污软件 | 欧美色图狠狠干 | 五月天伊人网 | 成人黄色免费视频 | 国产精品日韩欧美一区二区三区 | 麻豆免费观看网站 | 看黄色一级视频 | 先锋影音av在线 | 国产色99| 美女被草视频在线观看 | 夜夜嗨av| 99热8 | 亚洲国产91 | 香蕉视频网站在线观看 | 国产3级| 国产精品无码久久久久一区二区 | 国久久久 | 午夜视频国产 | 97超级碰碰人妻中文字幕 | 国产三级漂亮女教师 | 亚洲v日本| 成片免费观看 | 日日摸日日添日日碰9学生露脸 | 免费a视频| 少妇献身老头系列 | 噼里啪啦国语电影 | 求av网站 | 日本特黄特黄刺激大片 | 婷婷五月色综合 | 亚洲视频色图 | 深夜福利麻豆 | 亚洲精品在线影院 | 福利在线影院 | 亚洲成人激情在线 | 五月天av影院 | 日本男人的天堂 | 四虎黄网 | 国产精品伦一区二区三级古装电影 | 国产高清色 | 精品国产乱子伦一区二区 | 蜜桃网av| 精品久久久久久久久久久久久久久 | 亚洲欧美在线视频观看 | 久久久国产一区二区三区 | 在线观看中文字幕一区 | c逼| 一区二区视频 | 黄色动漫在线观看 |