这是什么操作?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中的变量竟然可以先使用后声明?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用SendBird强大的聊天API整理
- 下一篇: 真正的问题应该在我身上……