最近看书,说函数和函数中的临时变量(原子类型primitive type或者对象的引用reference)存储在栈(call stack)中;而对象和对象中的变量存储在堆(heap)中。我想问的问题是:对象中的函数(在栈中)如何和使用该对象的变量(在堆中)?是在函数中保存一个类似this的引用,指向该对象么?

解决方案 »

  1.   

    java 进行对象方法调用的时候,第一个参数就是this,只不过是隐藏起来,你看不见罢了~
      

  2.   

    首先我们知道,对象是类的实例。那么什么是类呢?类其实也是一个对象,不过是一个特殊的对象,包含了类方法(静态方法)、构造方法以及对象方法,并且还包含有内部结构的信息。JVM创建该类的对象时,类对象向JVM提供自身的结构信息,给新对象分配内存空间,并且JVM会执行类的构造方法初始化内部实例。所创建的对象内部含有指向其类对象入口地址指针的引用,对象自身的入口地址由引用它的变量掌握。这样,程序就可以通过变量找到对象,再通过对象找到存放于类对象的方法,以执行对象的操作;而通过对象寻址方法时,肯定还会把该对象的入口地址传递给在类对象中的方法,这样才能操作实际对象。这些都是底层机制实现的。比如:String s = new String("hello");
    s.toUpperCase();由此看来this的意义不是唯一的。对于方法、静态成员,它应该指向类对象的入口地址;而对于一般成员,它又应该指向对象的入口地址。可能是由内部机制判断。具体的细节应该更复杂,我认为大致应该如此。个人理解,仅供参考。