不知道在学习java的小伙伴,有没有跟我一样直到今天才真正明白this到底是干啥的?
一、关键字this指示什么?
说到this,就不得不提显示参数和隐式参数了。在每一个方法中,关键字this表示隐式参数。
例:
class people
{
// 实例域
private String name;
private String six;
private int yearsOld;
//构造器
public people(String n, String s, int y)
{
name = n;
six = s;
yearsOld = y;
}
//方法
public void nextYearsOld(int year)
{
int nextYear = yearsOld + year;
}
}
将此人的年龄增加1岁:
people peopleYearsOld = new people();
peopleYearsOld.nextYearsOld(1);
nextYearsOld方法有2个参数:
显示参数:
一个为显式参数,位于方法名后面括号中的数值,是明显列在方法声明中的,即year。
隐式参数:
一个为隐式参数,是出现在方法名前的people类对象,没有出现在方法声明中,即peopleYearsOld。
具体实现来说就是:
int nextYear = peopleYearsOld.yearsOld + year;
关键字this方式
nextYearsOld方法可以用下列方式编写,程序员更偏爱这种风格,因为这样可以将实例域与局部变量明显地区分开来:
public void nextYearsOld(int year)
{
int nextYear = this.yearsOld + year
}
二、应用:
最常用它的地方是在编写构造器和方法时,将参数命名为实例域。参数变量用同样的名字将实例域屏蔽起来。
例:这种方式有一个缺陷,只有阅读代码才能够了解参数n、s、y参数的含义。
public people(String n, String s, int y)
{
name = n;
six = s;
yearsOld = y;
}
它可以写成这种方式,也是常用的技巧:
将参数命名为name,name将引用这个参数,而不是实例域。但是,可以用this.name的形式访问实例域。如上述所说,this指示隐式参数,也就是所构造的对象。
public people(String name, String six, int yearsOld)
{
this.name = name;
this.six = six;
this.yearsOld = yearsOld;
}
备注:
实例域:对象中的数据称为实例域,就是这个对象自己的域,用来存放将要操作的数据。如:如果把一个人看作一个对象,这个人有姓名、性别、年龄。那么姓名、性别、年龄就可以理解为人这个对象的域。
网友评论