Java基础,将其用于构造函数
我正在自学Java。我读了这个代码,我需要一个解释 为什么在这段代码(复制自)中使用了此 这不等于在方法中有不同的局部变量名,例如:Java基础,将其用于构造函数,java,constructor,this,Java,Constructor,This,我正在自学Java。我读了这个代码,我需要一个解释 为什么在这段代码(复制自)中使用了此 这不等于在方法中有不同的局部变量名,例如: 公共广播(字符串i、字符串j、字符串k)而只需使用city=i 在这里使用this.city=city有什么原因吗? 谢谢 事实上,我将代码编写为: public class Address { String city,state,country; public Address(String tempCity, String tempState,
公共广播(字符串i、字符串j、字符串k)
而只需使用city=i
在这里使用this.city=city有什么原因吗?
谢谢
事实上,我将代码编写为:
public class Address
{
String city,state,country;
public Address(String tempCity, String tempState, String tempCountry) {
mycity = tempCity;
state = tempState;
country = tempCountry;
}
}
与第一个版本相比,第二个版本的优点和缺点是什么
这里使用这个有什么原因吗。city=city
在这种情况下,使用this.city=city代码>用于防止读者(和编译器)产生歧义
另一种选择是city=city代码>,但设置的城市不明显
(在这种情况下,不修改类变量)
相关的:
这不等于方法中有不同的局部变量名吗
是的,使用不同的变量名可能更简洁
(有些人喜欢相同的名字,我更喜欢第一个字母:city=c
)
与第一个版本相比,第二个版本的优点和缺点是什么
这是一种风格,如果你和其他人一起编程,最好使用相同的风格
如果你工作的公司只采用一种方式,而你开始采用另一种方式,那么维护代码库就会困难得多
相关:请注意,city
是类中的一个字段,也是函数传递的一个参数。
为了将传递的参数分配给城市字段,使用this.city
这不等于方法中有不同的局部变量名吗
例如:公共地址(字符串i、字符串j、字符串k)和仅使用
城市=我
是的。
但在为字段分配参数时,在参数中使用与字段中相同的名称可能会更清楚。
城市
字段表示城市
为什么在参数中使用其他名称?
就个人而言,在参数名称中用i
或cityP
表示它会使它不那么清晰。
之后,这是一个品味问题。他们在这里使用this.city
的原因是,正如您所说,本地参数名称city
对于类变量是不明确的
使用this
访问类变量的另一个要点是,它可以使代码更具可读性,因为即使看不到声明,您也可以立即知道它是类变量。至于这实际上非常常见的原因:IDE提供了自动赋值。例如,您在Eclipse中所做的是类型
class Address {
public Address(String city, String state, String country) {}
}
Eclipse将警告您,方法中未使用参数城市
、州
和国家
。
因此,您可以做的是触发一个自动修复,其中一个是“分配给新字段”,它将在类中创建字段并在构造函数中分配它们。然后字段名称将与参数相同,因此需要加前缀this.
以便它们引用字段,而不是参数。实际上,city
的i
并不干净,但city=cityName
isI可疑i
,j
,而k
只是它可以是任何东西的例子,如果它们被实际使用,那么它将很难遵循(比c
或cityName
)“替代方案是city=city;
,但不清楚设置的是哪个城市”-这不是替代方案,这是完全错误的。@Tom选择使用这个。
虽然仍将两个变量保留为city
,但它并没有保留相同的功能,但很多人尝试使用它,结果却出乎意料。从直觉上看,设置的城市不明显,也不会抛出错误OK,编辑清楚了您的意思。首先,您似乎建议将其作为一个可行的替代方案(这可能不太容易理解)。它不是关于使用“this”,因此不是重复,而是当您有替代方案时,更多的最佳实践。我个人认为没有理由在这里使用“this”和重复的变量名。我认为这个问题的一半或三分之一与其中一个答案的一小部分重叠。这不是一个明确的1比1的重复问题,如果一个问题确实是重复的或离题的,仍然需要密切关注选民。只要这个问题是开放的,如果你个人不认为它是重复的或离题的,或者任何这些,那么你应该回答这个问题。在许多情况下,只有一些人认为它是重复的/OT(不足以结束),在这种情况下,欢迎回答。虽然我不喜欢对坏问题的好答案投否决票,但你当然应该等到最后的结果被接受。
class Address {
public Address(String city, String state, String country) {}
}