[问题] 方法的变量与实例变量可以相同

楼主: s9209122222 (海海海)   2015-09-24 00:07:54
我读到了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或者其他方法的变量没关系?
作者: james732 (好人超)   2015-09-24 00:10:00
scope不同,就可以存在相同名称,但这会搞死自己XD
楼主: s9209122222 (海海海)   2015-09-24 00:12:00
什么是scope ?查翻译是范围?所以平常还是不要用同变量名称的意思囉?XD
作者: Dnight (暗夜)   2015-09-24 00:26:00
这概念是区域变量跟全域变量阿...变量的有效范围不一样
楼主: s9209122222 (海海海)   2015-09-24 01:19:00
既然是全域变量,那应该不能再被宣告了吧?这样不就重复宣告了?嗯﹍刚刚试了一下C 结果也可以,看来我观念真的搞错在main外面宣告x=10,里面宣告x=5 的话会显示5但里面没宣告的话就会显示10,搞地我好乱刚刚google到,确实可以相同名称,以前学的忘光光﹍
作者: putumaxally (putumaxally)   2015-09-24 03:48:00
shadowing只是方便IDE产生getter跟setter平常根本就不应该这样宣告搞不清楚的话只要在实体变量前面全部加 this 就好了
作者: cha122977 (CHA)   2015-09-24 19:57:00
JAVA里面没有全域变量啊 只有公开的成员变量你的例子就两个x被不同class持有 当然没事啊@@
作者: gmoz ( This can't do that. )   2015-09-24 20:35:00
你加个this. 就知道了

Links booklink

Contact Us: admin [ a t ] ucptt.com