Java的this,
分享于 点击 33502 次 点评:227
Java的this,
我们这样写方法:class ThisExample{
ThisExample(){}
ThisExample(int i){this();}
static int f1;
int f2;
static void m1(){}
void m2(){}
static int test1(){
return f1;
}
static int test2(){//编译错误!静态方法不能调用非静态成员,下面说明原因
return f2;
}
static int test2instead(ThisExample self){//替代方法
return self.f2;
}
int test3(){
return f1;
}
int test4(){
return f2;
}
static void test5(){
m1();
}
static void test6(){//编译错误!静态方法不能调用非静态方法,下面说明原因
m2();
}
static void test6instead(ThisExample self){//替代方法
self.m2();
}
void test7(){
m1();
}
void test8(){
m2();
}
}
我们这样创建对象:
ThisExample t=new ThisExample(); 或 ThisExample t=new ThisExample(1);//分配存储空间并调用构造函数
我们这样请求方法调用:
ThisExample.test1();
ThisExample.test2();
ThisExample.test2instead(t);
t.test3();
t.test4();
ThisExample.test5();
ThisExample.test6();
ThisExample.test6instead(t);
t.test7();
t.test8();
------------------------------------------------------------------------------------------------
编译器这样改编方法:
class ThisPrinciple{
ThisPrinciple(ThisPrinciple self){}
ThisPrinciple(THisPrinciple self,int i){ThisPrinciple.ThisPrinciple(self,i);}
static int f1;
int f2;
static void m1(){}
void m2(ThisPrinciple this){}
static int test1(){
return f1;
}
static int test2(){//没有this,就不可以用
return this.f2;
}
static int test2instead(ThisPrinciple self){//虽然没有this,但是我们可以传一个进来
return self.f2;
}
int test3(ThisPrinciple this){
return f1;
}
int test4(ThisPrinciple this){
return this.f2;
}
static void test5(){
ThisPrinciple.m1();
}
static void test6(){
ThisPrinciple.m2(this);//同上
}
static void test6instead(ThisPrinciple self){//同上
ThisPrinciple.m2(self);
}
void test7(ThisPrinciple this){
ThisPrinciple.m1();
}
void test8(ThisPrinciple this){
ThisPrinciple.m2(this);
}
}
编译器这样创建对象:
ThisExample t=new ThisExample();//分配存储空间
ThisExample.ThisExample(t); 或 ThisExample.ThisExample(t,1); //调用构造函数
编译器这样执行方法调用:
ThisPrinciple t=new ThisPrinciple();
ThisPrinciple.test1();
ThisPrinciple.test2();
ThisPrinciple.test2instead(t);
ThisPrinciple.test3(t);
ThisPrinciple.test4(t);
ThisPrinciple.test5();
ThisPrinciple.test6();
ThisPrinciple.test6instead(t);
ThisPrinciple.test7(t);
ThisPrinciple.test8(t);
非静态方法有一个隐藏的调用当前方法的对象的引用,而静态方法没有
相关文章
- 暂无相关文章
用户点评