在Java中,为什么要为自己分配一个变量

时间:2017-08-09 08:54:29

标签: java

我正在大学学习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 =学生'。这些值已经分配给他们持有的任何东西,为什么你需要这样做呢?我唯一的理论是它是初始化变量,但我不确定。

4 个答案:

答案 0 :(得分:4)

您没有将变量分配给自身,this.VARVAR是不同的变量。

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