[問題] 方法的變數與實例變數可以相同

看板java作者 (海海海)時間8年前 (2015/09/24 00:07), 編輯推噓2(2014)
留言16則, 6人參與, 最新討論串1/1
我讀到了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

09/24 00:10, , 1F
scope不同,就可以存在相同名稱,但這會搞死自己XD
09/24 00:10, 1F

09/24 00:12, , 2F
什麼是scope ?查翻譯是範圍?
09/24 00:12, 2F

09/24 00:14, , 3F
所以平常還是不要用同變數名稱的意思囉?XD
09/24 00:14, 3F

09/24 00:26, , 4F
這概念是區域變數跟全域變數阿...變數的有效範圍不一樣
09/24 00:26, 4F

09/24 01:19, , 5F
既然是全域變數,那應該不能再被宣告了吧?這樣不就
09/24 01:19, 5F

09/24 01:19, , 6F
重複宣告了?
09/24 01:19, 6F

09/24 01:37, , 7F
嗯﹍剛剛試了一下C 結果也可以,看來我觀念真的搞錯
09/24 01:37, 7F

09/24 01:41, , 8F
在main外面宣告x=10,裡面宣告x=5 的話會顯示5
09/24 01:41, 8F

09/24 01:42, , 9F
但裡面沒宣告的話就會顯示10,搞地我好亂
09/24 01:42, 9F

09/24 01:46, , 10F
剛剛google到,確實可以相同名稱,以前學的忘光光﹍
09/24 01:46, 10F

09/24 03:48, , 11F
shadowing只是方便IDE產生getter跟setter
09/24 03:48, 11F

09/24 03:48, , 12F
平常根本就不應該這樣宣告
09/24 03:48, 12F

09/24 03:50, , 13F
搞不清楚的話只要在實體變數前面全部加 this 就好了
09/24 03:50, 13F

09/24 19:57, , 14F
JAVA裡面沒有全域變數啊 只有公開的成員變數
09/24 19:57, 14F

09/24 19:57, , 15F
你的例子就兩個x被不同class持有 當然沒事啊@@
09/24 19:57, 15F

09/24 20:35, , 16F
你加個this. 就知道了
09/24 20:35, 16F
文章代碼(AID): #1M0ivT6j (java)