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/cn.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灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP