对象属性设置问题setter问题

agui54762 2011-08-02 04:53:23
以前写javabean类的时候,手写setter方法时,属性名前不用加“this.”,也能给属性赋值。现在再这样写就不行了呢。是不是jdk6.0不支持这样写了?谁来解释一下。例
class A
{
private String name;
private int age;

public void setName(String name)
{
name = name ; //以前第一个name前像这样不加this.也能赋值给全局变量name,现在不行了,怎么回事
}

public String getName()
{
return name ;
}

public void setAge(int age)
{
this.age = age ;
}

public int getAge()
{
return age ;
}


public static void main(String[] args)
{
A a = new A();
a.setName("Tom") ;
a.setAge(4) ;
System.out.println(a.getName());
System.out.println(a.getAge());
}
}

输出结果
null
4
...全文
123 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Java高知社区 2011-08-02
  • 打赏
  • 举报
回复
这个可以写,应该写……
bolink5 2011-08-02
  • 打赏
  • 举报
回复
全局变量和局部变量完全相同啊
应该是用this 深入的还未研究过 呵
Luger 2011-08-02
  • 打赏
  • 举报
回复
好像必须加吧 不然一个局部变量一个全局变量 名字都一样怎么区分呢?
飞跃颠峰 2011-08-02
  • 打赏
  • 举报
回复
你的参数也是name,实例变量也是name,当你说:
name = name;
的时候,你让编译器如何理解呢?

所以,约定是:
如果没有名为name的参数,name指实例变量
否则,name指参数
即参数命名优先
两者同名的时候,就必须用this.name来区分了
风尘中国 2011-08-02
  • 打赏
  • 举报
回复
楼主明显记错了,负责任的说,无论是那个版本的JAVA,都不可能是楼主说的
public void setName(String name)
{
name = name ; //以前第一个name前像这样不加this.也能赋值给全局变量name
}
你可以拿任何一个JDK环境试试,因为几乎所有的C语法风格的语言,在变量重名的时候,编译遵循“最小作用域原则”,在上面的setter里面,name的最小作用域就是这个set方法,肯定认为是输入的name,绝对不可能识别为全局作用域的this.name
qybao 2011-08-02
  • 打赏
  • 举报
回复
name = name ; //以前第一个name前像这样不加this.也能赋值给全局变量name,现在不行了,怎么回事
这样会造成歧义,到底是把属性的name赋给变量name还是把变量name赋给属性name,编译器没法知道
原来缘来 2011-08-02
  • 打赏
  • 举报
回复
以前行吗?java必须兼容以前的版本呀!!是不是楼主搞错了
小绵羊 2011-08-02
  • 打赏
  • 举报
回复
public void setName(String name)
{
name = name ; //以前第一个name前像这样不加this.也能赋值给全局变量name,现在不行了,怎么回事
}

一个局部变量name一个全局变量name名字都一样编译器无法识别到底是哪个
soli11722984 2011-08-02
  • 打赏
  • 举报
回复
有this是好习惯。。。。。。
加上吧,而且这个。。。。。eclipse自动生成完事

62,629

社区成员

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

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