这个参考在construstor里面

T.J*_*.J. 5 java stack constructor this

我正在观看关于Java的Programming Methodology(斯坦福)(CS106A)课程.在第 14讲中,Sahami教授 讲述了Java中用于堆栈和堆上的函数和对象的内存分配.

他告诉对于任何一个对象调用的方法,都会分配一个堆栈并且参数列表和这个引用在stacke上分配空间.通过存储的这个引用,Java能够引用对象的正确实例变量.

stack  - 调用方法时

但是对于构造函数,当构造对象时,此引用与参数列表一起存储.stack  - 调用构造函数时

我的问题是,如果构造函数没有这个引用,那么我们如何在构造函数中使用它为ex

public class foo {
private int i;
public foo(int i)
{this.i = i;// where this reference came from}
                 }
Run Code Online (Sandbox Code Playgroud)

Duk*_*ing 1

this只是一个 Java 关键字,允许您引用当前对象。它可以在任何班级中使用。

\n\n

使用关键字的目的this是防止引用局部变量。

\n\n

在您的示例中需要它,因为它i = i绝对不会执行任何操作,因为两者都是对同一局部变量(而不是类变量)的引用:

\n\n

从这里

\n\n
\n

在实例方法或构造函数中,这是对当前对象 \xe2\x80\x94 的引用,即正在调用其方法或构造函数的对象。您可以使用 this 从实例方法或构造函数中引用当前对象的任何成员。

\n
\n\n

编辑:

\n\n

我意识到您可能一直在询问实际的内存地址。

\n\n

我想

\n\n
class Point\n{\n  int x, y;\n  Point(int x, int y) { this.x = x; this.y = y; }\n  void move(int a, int b) { x = a; y = b; }\n}\nPoint p = new Point(3,4);\np.move(1,2);\n
Run Code Online (Sandbox Code Playgroud)\n\n

可能会被翻译成这样:(this明确)

\n\n
class Point\n{\n  int x, y;\n  static Point getPoint(int x, int y)\n    { Point this = allocateMemory(Point); this.x = x; this.y = y; }\n  static void move(Point this, int a, int b) { this.x = a; this.y = b; }\n}\nPoint p = Point.getPoint(3,4);\nPoint.move(p, 1, 2);\n
Run Code Online (Sandbox Code Playgroud)\n\n

但这一切都在一个低得多的水平上,所以它实际上看起来不会像这样,但这可能只是你思考它的一种方式。

\n