推 mars90226: 你這貼上來的code有很多小錯誤,然後我直接結果是07/13 11:27
→ mars90226: ns= 50 s= 125; ns= 125 s= 125; ns= 125 s= 12507/13 11:27
→ mars90226: static變數就是屬於class的,所以同個class的instance07/13 11:28
→ mars90226: 用到的static變數是同一個,所以自然不會歸007/13 11:28
→ mars90226: 貼錯,最後一行是ns= 0 s= 12507/13 11:28
這是我用手機打的,有的符號跟字母按錯,更正了
→ ssccg: 你知道題意是要考static和non-static,可是你看起來好像完07/13 11:32
→ ssccg: 全不懂static,不先重新搞清楚嗎07/13 11:34
→ ssccg: static就是屬於class不屬於instance,new幾個instance都跟07/13 11:37
→ ssccg: static欄位沒有關係07/13 11:39
→ ssccg: 另外嚴格說起來java沒有全域變數(global variable),只有07/13 11:42
→ ssccg: class variable(static)和instance variable(non-static)07/13 11:43
你說的我都懂啊,我想問的是,在第一次new了a帶入50後,接著再new b 為什麼還要跟50
比,如果new幾個instance都跟static欄位沒有關係,那為什麼之後new的變數還要受到影
響?
→ kniver999: 因為把c new出來的時候,傳進建構式的100並沒有比當前07/13 20:47
→ kniver999: 的s(125)還大,所以不會進到if裡面去執行,c的ns就保留07/13 20:48
→ kniver999: 初值0了07/13 20:48
這些流程我知道,我想問的是上面打的那樣
※ 編輯: birdy1147 (111.80.31.111), 07/13/2016 21:45:06
→ kyleJ: 其實你的問題上面真的都回答完了 只是你眼睛閉上說那是假07/13 23:05
→ kyleJ: 的沒去看 static不是C那種全域變數的概念 而物件new多少個 07/13 23:05
→ kyleJ: 出來 static的內容都會共用 07/13 23:05
可能我表達的方式不夠好,上面回答的沒有不對,但沒有釐清到我不懂的地方,而不是什
麼我閉上眼睛說那是假的....
→ ssccg: 從你問的問題看起來你就是沒懂啊.. 07/14 00:25
→ ssccg: 一開始 Ans.s 等於 007/14 00:27
→ ssccg: Ans a = Ans(50) // 0<50,所以結果Ans.s=50,a.ns=50 07/14 00:28
→ ssccg: Ans b = Ans(125) // 50<125,所以結果Ans.s=125,b.ns=12507/14 00:30
→ ssccg: Ans c = Ans(100) //125>100,所以結果Ans.s不變,c.ns為0 07/14 00:31
→ ssccg: 所謂不管new幾個變數都跟static欄位沒關,所以static欄位一 07/14 00:32
→ ssccg: 直是同一個,不管在哪個new Ans()裡面呼叫都是同一個 07/14 00:34
→ ssccg: "為什麼之後new的變數還要受到影響",Ans()裡面就拿Ans.s 07/14 00:34
→ ssccg: 來用,要怎麼不受影響? 程式寫怎樣不就怎樣 07/14 00:35
→ ssccg: 最後print時Ans.s也都是同一個,所以都印出s=125 07/14 00:39
→ ssccg: 如果你真的還看不懂,就把程式裡用到s的地方都改成Ans.s再07/14 00:39
→ ssccg: 看一次,跟this.ns就差在一個屬於instance一個屬於class 07/14 00:40
是我沒有表達清楚我的問題,謝謝你耐心的回應,有比較釐清我不了解的地方了,那如果
換了一個class呼叫Ans,才是等於從新載入嗎?
→ nmbalance: 我剛學Java一個月都懂前面推文大大辛苦仔細的解說,請07/15 16:24
→ nmbalance: 發文者先認真搞清楚好嗎,不要自己不懂就一直覺得是別07/15 16:24
→ nmbalance: 人解釋不清楚07/15 16:24
少拍馬屁,你才是搞清楚好嗎?我並沒有說別人解釋得不清楚
※ 編輯: birdy1147 (111.80.12.91), 07/15/2016 18:23:21
→ ssccg: 一個class只會被load一次,不管從哪個class呼叫都是同一個 07/15 18:34
→ ssccg: 除非用自訂的ClassLoader去管理class載入,不過我想這不在 07/15 18:43
→ ssccg: 基礎範圍了,通常使用就是不會重新載入了 07/15 18:44
推 gmoz: 阿宣告成static就是只有一個阿,全部同class的instance共用 07/18 11:10
→ gmoz: 當有多數人都用同樣的方式回答你 你就要想看看是不是自己 07/18 11:12
→ gmoz: 錯了 不要堅持己見 07/18 11:12
→ gmoz: 這個邏輯同樣可套用在抓bug上 共勉之 07/18 11:12
→ allen8952: 就我的想法來看,你創造三個物件,可是你在第三次創 07/25 00:48
→ allen8952: 造的時候就已經把static設定為125了所以不管怎麼樣s 07/25 00:48
→ allen8952: 一定是抓到125 07/25 00:48
→ allen8952: 你創造新的東西會被歸零的是妳沒有設定static 的 07/25 00:51
→ allen8952: 第三個print出來的ns會為零就是你在創造物件時,判斷 07/25 00:55
→ allen8952: 式就不會通過因為125<100是false ,ns就視為零 07/25 00:55
→ allen8952: 以上是我個人見解,自學java一個月也是我第一個語言 07/25 00:57
→ allen8952: ,覺得很好玩 07/25 00:57