突然就纠结一个基础问题

MikeDDT009 2017-05-26 08:03:50
最近开始学htm css js然后没碰java,今天突然就想到一个问题。那就是一个类里,属性有个String name;然后构造方法里面的形参也是String name。问题就是为什么两个变量名和类型都相同而不冲突?
...全文
680 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
_贺兰 2017-06-01
  • 打赏
  • 举报
回复
因为名字是给人看的(C语言的头文件函数声明都不用写参数名)
宿州阿里郎 2017-05-27
  • 打赏
  • 举报
回复
类中的这个name 在整个类中都可以调用。而方法中的这个name到另外个方法中是调用不到的。
MikeDDT009 2017-05-27
  • 打赏
  • 举报
回复
引用 14 楼 ForestDB 的回复:
不是应该是:一个是name,一个是this.name么?
10楼的解释可以接受。你说的并不完全是(形参的名字主要是和属性取的一样方便使用时候分辨,不信你可以把构造器里的形参改个名字,那么你直接name=新的新参变量名,这样并不用this都可以的),带this的是表示当名字相同的时候(至少在这构造器的形参和属性的同类型变量名一样),表示是属性的,但是它的名字也是name。然后形参的名字也是name。在这里使用this只是为了表面带了this的是类的(全局变量)。 我这个问题就是突然想到,同一大块,重复的变量名会报错,而类里的却不会,于是产生了一个疑惑而已
ForestDB 2017-05-27
  • 打赏
  • 举报
回复
不是应该是:一个是name,一个是this.name么?
余张的故事 2017-05-27
  • 打赏
  • 举报
回复
局部变量与成员变量
a350062174 2017-05-27
  • 打赏
  • 举报
回复
作用域 不一样
mon_ice 2017-05-27
  • 打赏
  • 举报
回复
引用 11 楼 HinanaiTenshi 的回复:
[quote=引用 9 楼 mon_ice 的回复:] [quote=引用 7 楼 MikeDDT009 的回复:] [quote=引用 5 楼 wangyifan102 的回复:] 类中的这个name 在整个类中都可以调用。而方法中的这个name到另外个方法中是调用不到的。
正因为局部变量和全局变量的问题,为何全局的不会覆盖上局部了[/quote]这里有初始化和jvm分配空间问题:调用对象构造函数初始化时,对象成员变量在里分配空间初始化,再调用(静态)构造块,再调用构造函数是在里为局部变量分配空间做运算[/quote] 命名显然和初始化以及jvm无关,java完全可以做到重名默认调用或者重名同参数重载(只有返回值不同),jvm根据上下文逆推逻辑的能力还是很强大的,jdk6的一个内部demo就实现了返回值签名重载, 这里命名的因素只是语法上的规范而已。 java里同名变量只要申明成功,调用就可以遵循一定规范,通常的说法叫就近原则,不过具体还是以jls详细规定为准。当一个范围类有两个同名变量的时候,jls默认采用范围最窄的那个,其他范围的变量必须带上范围前缀以示区别,否则要么调用失败,要么编译不通过。[/quote]哦~他说的是变量名,我以为说的是值的覆盖,没看题
  • 打赏
  • 举报
回复
局部变量和全局变量。。。。
HinanaiTenshi 2017-05-27
  • 打赏
  • 举报
回复
引用 9 楼 mon_ice 的回复:
[quote=引用 7 楼 MikeDDT009 的回复:] [quote=引用 5 楼 wangyifan102 的回复:] 类中的这个name 在整个类中都可以调用。而方法中的这个name到另外个方法中是调用不到的。
正因为局部变量和全局变量的问题,为何全局的不会覆盖上局部了[/quote]这里有初始化和jvm分配空间问题:调用对象构造函数初始化时,对象成员变量在里分配空间初始化,再调用(静态)构造块,再调用构造函数是在里为局部变量分配空间做运算[/quote] 命名显然和初始化以及jvm无关,java完全可以做到重名默认调用或者重名同参数重载(只有返回值不同),jvm根据上下文逆推逻辑的能力还是很强大的,jdk6的一个内部demo就实现了返回值签名重载, 这里命名的因素只是语法上的规范而已。 java里同名变量只要申明成功,调用就可以遵循一定规范,通常的说法叫就近原则,不过具体还是以jls详细规定为准。当一个范围类有两个同名变量的时候,jls默认采用范围最窄的那个,其他范围的变量必须带上范围前缀以示区别,否则要么调用失败,要么编译不通过。
HinanaiTenshi 2017-05-27
  • 打赏
  • 举报
回复
参见Java语言规范-命名 里面明确了多种重复命名的规定:有的不可重名,有的可隐藏重名单不可默认(只用名字)调用,可重名不可重复签名(方法命名),可重名(一般是作用域不同)。
mon_ice 2017-05-27
  • 打赏
  • 举报
回复
引用 7 楼 MikeDDT009 的回复:
[quote=引用 5 楼 wangyifan102 的回复:] 类中的这个name 在整个类中都可以调用。而方法中的这个name到另外个方法中是调用不到的。
正因为局部变量和全局变量的问题,为何全局的不会覆盖上局部了[/quote]这里有初始化和jvm分配空间问题:调用对象构造函数初始化时,对象成员变量在里分配空间初始化,再调用(静态)构造块,再调用构造函数是在里为局部变量分配空间做运算
冰镇芒果 2017-05-27
  • 打赏
  • 举报
回复
全局和局部正解
MikeDDT009 2017-05-27
  • 打赏
  • 举报
回复
引用 5 楼 wangyifan102 的回复:
类中的这个name 在整个类中都可以调用。而方法中的这个name到另外个方法中是调用不到的。
正因为局部变量和全局变量的问题,为何全局的不会覆盖上局部了
MikeDDT009 2017-05-27
  • 打赏
  • 举报
回复
引用 3 楼 a350062174 的回复:
作用域 不一样
正因为局部变量和全局变量的问题,为何全局的不会覆盖上局部了
Lines_T 2017-05-26
  • 打赏
  • 举报
回复
一个是成员变量,一个是局部变量 那个形参相当于是那个方法里面的一个局部变量

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧