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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

这是什么操作?java中的变量竟然可以先使用后声明?

發布時間:2023/12/3 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 这是什么操作?java中的变量竟然可以先使用后声明? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

相信大家在看到標題之后,是疑惑的點進來看內容的。

在看到標題之后,大家肯定會懷疑,我趙某人用java寫了好幾年的代碼了,還真就沒見過java中的變量能先用在聲明,今天就是進來看看你在沒有聲明變量的前提下是怎么用的!怎么用的!!!

各位,先別激動,能不能你先自己看,我們先來寫個例子:

/*** * * 項目名稱:BianChengXiGuan * 類名稱:TestMain * 類描述: 靜態變量 * 創建人:Mu Xiongxiong * 創建時間:2020-6-17 下午10:53:54 * 修改人:Mu Xiongxiong * 修改時間:2020-6-17 下午10:53:54 * 修改備注: * 個人博客:https://blog.csdn.net/qq_34137397 * 微信公眾號:雄雄的小課堂 * @version **/ public class TestMain {public static int num = 10;static{num = 100;}public static void main(String[] args) {System.out.println(num);}}

這個例子很簡單,輸出結果我不說大家也都知道,是100,正確。那么我們稍微改一下上面的代碼:

/*** * * 項目名稱:BianChengXiGuan * 類名稱:TestMain * 類描述: 靜態變量 * 創建人:Mu Xiongxiong * 創建時間:2020-6-17 下午10:53:54 * 修改人:Mu Xiongxiong * 修改時間:2020-6-17 下午10:53:54 * 修改備注: * 個人博客:https://blog.csdn.net/qq_34137397 * 微信公眾號:雄雄的小課堂 * @version **/ public class TestMain {static{num = 100;}public static int num = 10;public static void main(String[] args) {System.out.println(num);}}

注意了,我將聲明num的和賦值num的代碼替換了位置,你肯定會問:兄弟,你這代碼能編譯通過嗎?即便你能編譯通過,那輸出來是多少???(這里可以看到num是先賦值后聲明的)

這段代碼可以編譯通過,并且輸出的num結果是10,是不是有點出乎意料了,不著急,要想把這里說通,我們還得回到靜態變量的誕生說起,總所周知,靜態變量是在我們第一次使用類(加載類)的時候別分配到數據區的,它在內存中之后一次拷貝,不會被分配多次,其后不管給它賦值多少遍,都是值在改變,而地址不變。

當類被加載時,首先會找到類中的所有靜態聲明,然后給它們分配空間,這個時候僅僅只是分配空間,并未賦值,此后,JVM就會根據靜態賦值或者靜態塊的先后順序去執行,到這里相信大家差不多就明白了。

回到我們的代碼中,TestMain類被加載時,JVM首先在內存中開辟出了一塊空間,并且將該地址傳遞給num,也就是執行的是public static int num,其次按照先后順序,就該執行num = 100;了,接著往下執行,碰到了num = 10;顯而易見,最后輸出的結果就是num為10,誰在最后,誰說了算!

最后溫馨提示一下大家,正常情況下,我們還是先聲明在賦值比較靠譜點,免得本來想裝個大神來著,結果出現了語料未及的結果,造成沒必要的麻煩可就不值得了。

總結

以上是生活随笔為你收集整理的这是什么操作?java中的变量竟然可以先使用后声明?的全部內容,希望文章能夠幫你解決所遇到的問題。

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