如题 算是问题一吧。
2。如下代码
class A{
A fun(){return this;} public static void main(String[] args){
A a=new A();
a.fun().fun()....;
}
}
不明白的地方 a.fun()返回一个引用(地址)存放在哪里呢
我想是不是有个临时内存什么的 存放方法返回的东西 然后再
通过那个临时内存中的地址继续调用fun()呢
高人指点下。。
2。如下代码
class A{
A fun(){return this;} public static void main(String[] args){
A a=new A();
a.fun().fun()....;
}
}
不明白的地方 a.fun()返回一个引用(地址)存放在哪里呢
我想是不是有个临时内存什么的 存放方法返回的东西 然后再
通过那个临时内存中的地址继续调用fun()呢
高人指点下。。
个人理解:
前面的a.fun()返回的是对象a 自身的引用,然后把这个引用赋值给指向A类型对象的栈内存变量,这个变量也是指向a的。再由这个变量第二次调用fun(),返回引用......
A fun(){
A *this = new A;
return this;} c中的
A fun(){
A *this = malloc(sizeof(A));
return this;
}
或者A中增加一个字段叫 A *this;
c中可以 struct A{
struct A *this;
......其他字段
}初始化的时候为
struct A a = {this=&a};
下面的A fun(){
A *this = malloc(sizeof(A));
return this;
}
通过编译器的暗地操作为
A fun(struct A a){
return a->this;
}
就是一个自引用,new A()的时候都是在堆上分配的,this只是指向堆上分配的那个地址而已
1)先不考虑内部类,,因为内部类对象中确实含有一个对象成员,指向外部类的对象(即:指向外部类对象的那个this)。
2)若不是内部类,则类中根本不存在所谓的数据成员this.
3)A fun(){return this;}
编译时其实是按如下生成代码的:(会向方法自动传输一个隐含的形式参数:这个就是this)
A fun(A this,你的其它参数)
{return this;}
4)调用时:a.fun();其实是这样:fun(a);//这个a其实传输给了那个所谓的this.
5)a.fun().fun();其实是:
A temp=a.fun();
temp.fun();
{return this;}
4)调用时:a.fun();其实是这样:fun(a);//这个a其实传输给了那个所谓的this.
5)a.fun().fun();其实是:
A temp=a.fun();
temp.fun();
引用上面的。其实 面向对象的方法调用 就是给方法发送信息。例如:a.fun()其实就是给fun函数发送信息
java内部会帮我们转为这样子fun(a)调用fun(),地址告诉fun方法是 那个对象调用。其中a存储的就是对象的地址。至于函数返回值 ,在x86平台函数的返回值都是存储在eax寄存器的。j我估计java也使用。因为所有的语言都最后都是机器代码。
1.存放在哪里呢?
肯定是内存,不过内存是有规律,什么东西放在什么地方 !(好像分那么几块吧,自己去查下!内存的分配)
2.存放方法返回的东西?
对 是一个东西 不过是一个16进制的内存地址,类似移动服务员的员工编号名字!(找人要靠名字,生成一个对象放到内存中,那你找它就相当于找员工用编号,而java中是内存的地址,一样的)
3.然后再 通过那个临时内存中的地址继续调用fun()呢 ?
不是那个地址,是那个地址所引用的对象! 太晚啦 不知道写些什么!!