看板 java 關於我們 聯絡資訊
我讀到了this這東西後才發現原來JAVA的變數可以重複被宣告! 例如: public class Test { public static void main(String[] args) { Time x=new Xmas(5); } } class Xmas { private int x; public Xmas(int x) { this.printX(x); } private void printX(int x) { System.out.println(this.x=x); } } 這樣會成功印出5 這個數字 但以前學C 的時候不是說不能夠重複宣告嗎?為什麼這邊可以這樣? 那個x 不是算全域變數嗎? 還是說class 宣告的變數和main或者其他方法的變數沒關係? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.207.31 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1443024477.A.1AD.html
james732: scope不同,就可以存在相同名稱,但這會搞死自己XD 09/24 00:10
s9209122222: 什麼是scope ?查翻譯是範圍? 09/24 00:12
s9209122222: 所以平常還是不要用同變數名稱的意思囉?XD 09/24 00:14
Dnight: 這概念是區域變數跟全域變數阿...變數的有效範圍不一樣 09/24 00:26
s9209122222: 既然是全域變數,那應該不能再被宣告了吧?這樣不就 09/24 01:19
s9209122222: 重複宣告了? 09/24 01:19
s9209122222: 嗯﹍剛剛試了一下C 結果也可以,看來我觀念真的搞錯 09/24 01:37
s9209122222: 在main外面宣告x=10,裡面宣告x=5 的話會顯示5 09/24 01:41
s9209122222: 但裡面沒宣告的話就會顯示10,搞地我好亂 09/24 01:42
s9209122222: 剛剛google到,確實可以相同名稱,以前學的忘光光﹍ 09/24 01:46
putumaxally: shadowing只是方便IDE產生getter跟setter 09/24 03:48
putumaxally: 平常根本就不應該這樣宣告 09/24 03:48
putumaxally: 搞不清楚的話只要在實體變數前面全部加 this 就好了 09/24 03:50
cha122977: JAVA裡面沒有全域變數啊 只有公開的成員變數 09/24 19:57
cha122977: 你的例子就兩個x被不同class持有 當然沒事啊@@ 09/24 19:57
gmoz: 你加個this. 就知道了 09/24 20:35