作者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/cn.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