1)底部的代码是JOGL简介的一部分,它只是java的openGL,我不太明白这里使用“this”。我之前使用它并在许多用途中对其进行了点对点研究,但我不明白它在这个特定背景中的使用方式,所以请不要指导我另一个“这个”解释,因为我已经读完了。
例如,下面的位是:
public S1_original() {
super("S1");
this.setSize(WIDTH, HEIGHT);
这里提到的“this”关键字是什么?我没有写任何其他类,那么使用“.setSize()”方法是什么呢?
2)如果我在上面的例子中没有使用“this”和“this.setSize(WIDTH,HEIGHT)那么我会把它放在那里?
3)这段代码中的“this”是什么?
canvas.addGLEventListener(this);
为什么类似的行在它之前需要“this”,但是在这里使用它作为参数。
public class S1_original extends Frame implements GLEventListener {
private static final int WIDTH=640;
private static final int HEIGHT=480;
//private static final float NEAR_CLIP=0.1f;
//private static final float FAR_CLIP=100.0f;
private GLCanvas canvas;
private FPSAnimator animator;
private double theta = 0;
private double sinValue = 0;
private double cosValue = 0;
public static void main(String[] args) {
S1 frame = new S1();
frame.setVisible(true);
}
public S1_original() {
super("S1");
this.setSize(WIDTH, HEIGHT);
GLProfile glp = GLProfile.getDefault();
GLCapabilities caps = new GLCapabilities(glp);
GLCanvas canvas = new GLCanvas(caps);
this.add(canvas, "Center");
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
} );
canvas.addGLEventListener(this);
animator = new FPSAnimator(canvas, 60);
animator.start();
}
非常感谢您的帮助!
答案 0 :(得分:3)
此 是this
的完全标准用法:它指的是该方法当前正在操作的对象。由于S1_original()
是构造函数,因此它指的是当前正在构造的对象。那么该行的作用是在正在构造的对象上调用setSize(WIDTH, HEIGHT)
。但是,从另一个成员方法或构造函数中调用成员方法时,总是可以省略this
,因此该行等同于:
setSize(WIDTH, HEIGHT);
您的困惑可能源于您实际上没有在班级中创建setSize
方法。但请注意,您的类扩展了Frame
- 该方法继承自该类。
答案 1 :(得分:1)
这里提到的“this”关键字是什么?我没有写任何其他类,那么使用“.setSize()”方法是什么呢?
this
关键字表示对运行该方法的对象的引用。这可能是代码出现的类的实例,也可能是子类的实例。语义与将this
替换为包含对同一对象的引用的普通变量的语义相同。
如果我不在上面的例子中使用“this”和“this.setSize(WIDTH,HEIGHT)”,我会把它放在那里?
无。你只需要写setSize(WIDTH, HEIGHT)
。这意味着完全相同的事情。
当您看到在this
上调用的方法时,通常为了清晰代码,强调该方法是在此对象上调用的,而不是在另一个对象上调用可用。例如,我倾向于在equals()
方法中执行此操作,其中我调用两个不同对象的相同方法,其中一个this
,并比较结果。
我认识那些喜欢使用this
来区分super
的人。没有必要这样做,当我找到它时,我会压制这种行为,因为它可能令人困惑。风险太大,以至于它将被视为“这个阶级”,而它实际上意味着“这个对象”。如果出错,可能会导致读者假设调用的方法与实际情况不同。
这段代码中的“this”是什么?
canvas.addGLEventListener(this);
this
与其他地方的意思相同。它指的是运行包含该代码的方法的对象。如果您将该对象视为执行操作canvas.addGLEventListener(this)
的actor,您可能会将效果视为将自身作为参数传递给给定方法的对象。但更正式的是,它正在将引用传递给它自己 - 它的地址,就像它一样。