标签:
关键字this是指向调用对象本身的引用名;
每当一个对象创建后,Java虚拟机会给这个对象分配一个引用自身的指针,这个指针的名字就是 this;
《java编程思想》中关于this的笔记:
this关键字只能在方法内部使用,表示对"调用方法的那个对象"的引用;
在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可,当然你也可以加上;
我们没有必要加上this,因为编译器能帮我们自动添加;
举例:如下方法在testThisOne加上this和没有加是一样的;
源码:
public class thisTest{
public static void main(String[] args){
Test test = new Test();
test.testThisOne();
}
}
class Test{
public void testThisOne(){
testThisTwo(10);
this.testThisTwo(100);
}
public void testThisTwo(int i){
System.out.println(i);
}
}
运行结果:
可以使用return this返回这个对象的引用;
他人博客总结
这个博客中说道:this只能在类中的非静态方法中静态方法和静态的代码块中绝对不能出现this;this只能和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this;
尝试:试着在static方法中使用this,如结果所示,如果在testThisOne中使用this,则会报以下变异错误,如果不使用this,运行正常;
源码:
public class thisTest{
public static void main(String[] args){
Test test = new Test();
test.testThisOne();
}
}
class Test{
public static void testThisOne(){
this.testThisTwo(100);
}
public static void testThisTwo(int i){
System.out.println(i);
}
}
运行结果:
this用法
用法一:引用类的隐藏数据域(hidden data);函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽;
举例:通过输出this.i,可以看出,this的作用是调用该对象的变量i,因为是类里面的成员变量,基本数据类型没有初始化的时候会自动初始化,int默认为0;在Myprint方法中有变量i,但这里由于this指向的是对象本身的引用名,所以这里this.i是类的成员变量i,而不是方法中定义的i;
源码:
public class thisTest{
public static void main(String[] args){
Test test = new Test();
test.Myprint(10);
}
}
class Test{
private static int i;
public void Myprint(int i){
System.out.println(i);
System.out.println(this.i);
}
}
运行结果:
用法二:让构造方法调用同一个类的另一个构造方法;
举例:如下所示,new Test()调用的是无参构造函数,但是在无参构造函数中用this(参数列表)的方式调用了另一个有参构造函数
源码:
public class thisTest{
public static void main(String[] args){
Test test = new Test();
}
}
class Test{
public Test(){
this(10);
}
public Test(int i){
System.out.println(i);
}
}
运行结果:
总结:
关于this的用法大概就这么些,其它的例如为什么static中不能使用this这些,还不清楚,等学多了再一起总结吧;
标签:
原文地址:http://www.cnblogs.com/acenodie/p/4423201.html