class Employee {
public String name = "John";
public void modifyName(String name)
{
name = name; // I know using 'this' would be helpful, but I dont want to
}
System.out.println(name);
}
class Someclass {
public static void main(String[] args)
{
Employee e1 = new Employee();
System.out.println(e1.modifyName("Dave"));
System.out.println(e1.name); // Does this outputs John or Dave?
}
}
方法modifyName的行为是否像setter一样,并将实例变量名称更改为“Dave”?
当方法遵循命名约定setProperty
?
modifyName
无法正常工作,如果名为setName
答案 0 :(得分:2)
要直接回答您的问题,没有该方法的命名约定不会使其充当设置者。
如果是这种情况,则不需要方法体。
public void setName(String name) {
}
的行为与
相同public void setName(String name) {
this.name = "I don't care what name you gave";
}
根本不是这样。
您的特定方法无效的原因是由于声明:
//我知道使用'这个'会有所帮助,但我不想
使用this.name
的原因是区分方法参数和实例成员。实例成员被参数遮蔽,因此如果没有this.name
,您只需用自身覆盖方法参数。
如果您绝对拒绝使用this.name
出于任何(愚蠢)原因,那么您应该更改参数的名称:
public void modifyName(String iHateUsingThis) {
name = iHateUsingThis;
}
答案 1 :(得分:1)
在方法中,方法参数优先于实例变量。方法modifyName引用方法参数名称,而不是实例变量名称。
答案 2 :(得分:0)
在modifyName
中,name
参数会隐藏isntance成员,因此不会设置实例成员(e1.modifyName("Dave")
不会更改任何内容)。您应该编写this.name = name;
或为实例成员使用不同的名称。
方法modifyName是否因为命名对话而不能成为setter? modifyName()仅仅因为不使用JavaBean命名约定而将name视为方法参数?
该行为与方法的命名约定无关。如果将其更改为setName,它的行为将相同。唯一能产生影响的是改变参数名称或实例成员名称,使它们不同。
答案 3 :(得分:0)
如果您不使用this
作为实例变量。然后你只是在下面的语句中使用方法变量:
name = name; // I know using 'this' would be helpful, but I dont want to
结果,什么都不会改变
答案 4 :(得分:0)
在方法块中将使用局部变量(如果名称与全局变量的名称相同)。因此,全局变量不会发生变化。这就是为什么在这里强制使用这个运算符来访问全局变量。
答案 5 :(得分:0)
打印“John”
说你不想用“这个”。只是荒谬。输入并大大提高代码质量几乎不需要任何努力。
如果您不想遵循Java标准的代码样式,请使用inName,然后使用name = inName;或某些。