java 板


LINE

不好意思,想問個比較基礎的問題,我知道題意是要考static與 non-static,但我看了 很久都想不通,如下: class Ans{ int ns; static int s; Ans(int ns){ if(s<ns){ s=ns; this.ns=ns; } } void print( ){ system.out.println(“ns= ”+ns+“ s= ”+s); } } public class Test{ public static void main(String[ ] args){ Ans a = new Ans(50); Ans b = new Ans(125); Ans c = new Ans(100); a.print( ); b.print( ); c.print( ); } } 我以為結果會是 ns=50 s=50 ns=125 s=125 ns=100 s=100 但結果是 ns=50 s=125 ns=125 s=125 ns=0 s=125 我知道全域變數int在沒有設定的情況下,系統會預設為0 所以在new Ans(50);時,經過if判斷式,會被兩個變數設為50 所以我以為答案是我想的那樣, 但從正確答案看來,static int s;會留著之前的50,而int ns;卻會重新歸0 想請問這是為什麼呢?我以為重新new過以後,指派給新的物件,應該會是不相關的兩個 物件? --



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







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP