1、第一种用法
如下代码:
class Lesson5{
String name;
void fun(){
System.out.println("my name is " + name);
}
}
在很多时候其实我们会忽略一个问题,那就是
System.out.println("my name is " + name);
这行代码中的name没有对象。
按照标准的java写法,name应该是需要有它所属的对象的,其实在执行的过程中这个那么是有对象的,只是给省略了。
那么在这里其实这里是把this.name简写成了name了:
System.out.println("my name is "+ this.name);
这个this就是对象。
至于这个this究竟是那个对象,在执行如下测试代码之后:
class Test{
public static void main(String args []){
Lesson5 A = new Lesson5();
A.name = "A";
Lesson5 B = new Lesson5();
B.name = "B";
A.fun();
B.fun();
}
}
执行的结果如下:
D:\Android\src>javac Lesson5.java
D:\Android\src>javac Test.java
D:\Android\src>java Test
my name is A
my name is B
D:\Android\src>
其实从结果可以看出,当对象A执行的时候打印出来的是"A",对象B执行的时候打印出来的是"B",而产生这样的结果,也就是因为有这个this关键字。
这个this按照官方的说法来说,首先它是代表这个一个对象,这个被代表的对象调用这个fun函数的对象。
例如上述代码中的 :A.fun();//这里执行fun()函数的时候这个this就代表着对象A
B.fun();//这里执行fun()函数的时候这个this就代表着对象B
简单总结就是:哪个对象调用fun()这个函数,这个this就代表着哪个对象。这跟现实生活中的“我”字很相像。
例如:
张三说:我的名字是张三;//那么这个“我”就代表张三
李四说:我的名字是李四;//那么这个“我”就代表李四
很好理解吧!/******************************************************************************华丽分割线*******************************************************************************/
存在一种特殊情况与上述的冲突:
如:
class Lesson5{
String name;
void fun(String name){
System.out.println("my name is " + name);
}
}
上述的fun函数形参是name,而成员变量也是name,这个时候有两种情况:
System.out.println("my name is " + name);//此时这里的那么是传入的参数
System.out.println("my name is " + this.name");//此时这里的name是成员变量的name
/******************************************************************************华丽分割线*******************************************************************************/
例如:
class Lesson5(){
String A;
int B;
char C;
void fun(String A,int B,char C){
this.A = A;
this.B = B;
this.C = C;
}
}
这样写可以很方便的清楚传入参数所对应的成员变量,同样this也可以用来调用本类里面的另外的构造函数。
如:
class Lesson5(){
String A;
int B;
char C;
void fun(){
}
void fun(Sting A,int B){
this.A = A;
this.B = B;
}
void fun(String A,int B,char C){
this(A,B);
this.C = C;
}
}
使用的方法是this(),其中传入的参数将会决定调用的是哪一个函数
如果是this();则调用的是
void fun(){
}
如果是this(A,B);则调用的是
void fun(Sting A,int B){
this.A = A;
this.B = B;
}
在使用this调用本类当中其他的构造函数时应该注意:
1.对this的调用必须是构造函数的第一个语句
2.一个构造函数只能用一个this去调用其他的构造函数,即不能用两个this,有1也能推出来。
By Urien 2017年8月26日 13:33:23