作者s9209122222 (海海海)
看板java
標題[問題] 方法的變數與實例變數可以相同
時間Thu Sep 24 00:07:54 2015
我讀到了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://webptt.com/m.aspx?n=bbs/java/M.1443024477.A.1AD.html
1F:→ james732: scope不同,就可以存在相同名稱,但這會搞死自己XD 09/24 00:10
2F:→ s9209122222: 什麼是scope ?查翻譯是範圍? 09/24 00:12
3F:→ s9209122222: 所以平常還是不要用同變數名稱的意思囉?XD 09/24 00:14
4F:推 Dnight: 這概念是區域變數跟全域變數阿...變數的有效範圍不一樣 09/24 00:26
5F:→ s9209122222: 既然是全域變數,那應該不能再被宣告了吧?這樣不就 09/24 01:19
6F:→ s9209122222: 重複宣告了? 09/24 01:19
7F:→ s9209122222: 嗯﹍剛剛試了一下C 結果也可以,看來我觀念真的搞錯 09/24 01:37
8F:→ s9209122222: 在main外面宣告x=10,裡面宣告x=5 的話會顯示5 09/24 01:41
9F:→ s9209122222: 但裡面沒宣告的話就會顯示10,搞地我好亂 09/24 01:42
10F:→ s9209122222: 剛剛google到,確實可以相同名稱,以前學的忘光光﹍ 09/24 01:46
11F:推 putumaxally: shadowing只是方便IDE產生getter跟setter 09/24 03:48
12F:→ putumaxally: 平常根本就不應該這樣宣告 09/24 03:48
13F:→ putumaxally: 搞不清楚的話只要在實體變數前面全部加 this 就好了 09/24 03:50
14F:→ cha122977: JAVA裡面沒有全域變數啊 只有公開的成員變數 09/24 19:57
15F:→ cha122977: 你的例子就兩個x被不同class持有 當然沒事啊@@ 09/24 19:57
16F:→ gmoz: 你加個this. 就知道了 09/24 20:35