我正在大学学习Java,但我很难理解你为什么要在构造函数中为自己分配一个变量。
这是示例代码:
private String name;
private int age;
private boolean student;
private char gender;
public Person(String name, int age, boolean student, char gender)
{
this.setName(name);
this.age = age;
this.student = student;
}
我正在努力理解' this.age = age'并且' this.student =学生'。这些值已经分配给他们持有的任何东西,为什么你需要这样做呢?我唯一的理论是它是初始化变量,但我不确定。
答案 0 :(得分:4)
您没有将变量分配给自身,this.VAR
和VAR
是不同的变量。
在Java
中使用班级时,您可以使用this
前缀来引用您的属性。在许多方法中,this
前缀是可选的,因为没有任何具有相同名称的方法参数。但是,当方法的变量与类属性具有相同的名称时,必须使用this
前缀来区分类属性和方法参数(否则最多局部变量 - 方法参数 - 隐藏最全局的 - 类属性。)
所以当你使用时:
this.age = age
您正在将class属性初始化为名为age
的方法参数的值。
请注意,如果方法参数的名称总是与类属性不同,则可以避免使用this
前缀:
private String name;
private int age;
private boolean student;
private char gender;
public Person(String name, int ageParam, boolean studentParam, char genderParam){
setName(name);
age = ageParam;
student = studentParam;
gender = genderParam;
}
就我个人而言,我认为使用this
前缀更有礼貌,因为您可以快速查看是否要修改类属性,方法参数保留其有用的名称(最好记录和理解代码) 。
答案 1 :(得分:1)
这只是因为您拥有此命名约定,实际上这是100%相同:
private String name;
private int age;
private boolean student;
private char gender;
public Person(String nnn, int aaa, boolean sss, char ggg){
this.setName(nnn);
this.age = aaa;
this.student = sss;
this.gender = ggg;
}
但有了这个,this.
变得无用,因为age = a;
没问题,这就是为什么当有误解可能你使用this.
来确定它是该类的属性,不同构造函数的参数。
答案 2 :(得分:1)
这里的关键点是有两个变量称为age
。第一个是局部变量,它是构造函数的参数;第二个是Person
类的实例变量。
在构造函数中,参数隐藏实例变量,因此只需编写age
即可引用参数。但是,如果您编写this.age
,则必须引用实例变量。因此:
this.age = age
将构造函数参数的值赋给实例变量。
答案 3 :(得分:1)
select DISTINCT p.code, a.itemno, a.descrip, a.rev, a.class, a.std_cost, a.std_price, t.trans_in_out, t.trans_quan,
(select case when V.MIN_CUST_PRICE is null then
when V.MIN_CUST_NAT_PRICE is null then
when V.MIN_SELL_PRICE is null then 0
else V.MIN_SELL_PRICE
else V.MIN_CUST_NAT_PRICE
else V.MIN_CUST_PRICE
end
from v_sca_item_price_summary v where rownum = '1') as Value
from arinvt a, translog t, eplant e, v_sca_item_price_summary v, prod_code p
where v.arinvt_id = a.id
and a.prod_code_id = p.id
and t.eplant_id = e.id
and t.trans_date between :start_date and :end_date
,this.age = age
是与Person类对象关联的变量(此关键字引用类'对象引用),this.age
是局部变量(它的范围只在构造函数定义中),它在构造函数中传递的值将被赋值给对象的变量。
因此,在创建对象时调用class的构造函数:
人p =新人("名称",22,true,' M');
p对象的年龄将设置为22。
如果您使用过:
age