T.J*_*.J. 5 java stack constructor this
我正在观看关于Java的Programming Methodology(斯坦福)(CS106A)课程.在第 14讲中,Sahami教授 讲述了Java中用于堆栈和堆上的函数和对象的内存分配.
他告诉对于任何一个对象调用的方法,都会分配一个堆栈并且参数列表和这个引用在stacke上分配空间.通过存储的这个引用,Java能够引用对象的正确实例变量.

但是对于构造函数,当构造对象时,此引用与参数列表一起存储.
我的问题是,如果构造函数没有这个引用,那么我们如何在构造函数中使用它为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)
this只是一个 Java 关键字,允许您引用当前对象。它可以在任何班级中使用。
使用关键字的目的this是防止引用局部变量。
在您的示例中需要它,因为它i = i绝对不会执行任何操作,因为两者都是对同一局部变量(而不是类变量)的引用:
从这里:
\n\n\n\n\n在实例方法或构造函数中,这是对当前对象 \xe2\x80\x94 的引用,即正在调用其方法或构造函数的对象。您可以使用 this 从实例方法或构造函数中引用当前对象的任何成员。
\n
编辑:
\n\n我意识到您可能一直在询问实际的内存地址。
\n\n我想
\n\nclass 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);\nRun Code Online (Sandbox Code Playgroud)\n\n可能会被翻译成这样:(this明确)
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);\nRun Code Online (Sandbox Code Playgroud)\n\n但这一切都在一个低得多的水平上,所以它实际上看起来不会像这样,但这可能只是你思考它的一种方式。
\n| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |