请阅读以下教程的第4点(使用此关键字)
http://www.javatpoint.com/this-keyword
this
如何成为方法的正式论据。
在构造函数的情况下,如果构造函数类似于 - Const(OBJECT obj),我们可以传递this
,只是为了调用构造函数。
将this
作为方法中的实际参数传递的方案可以派上用场吗?
答案 0 :(得分:4)
你可以从构造函数中调用它来调用其他构造函数(基于调用,例如this():你正在调用默认构造函数,这个(param)你正在调用paramitarized构造函数。现在这作为参数,底线是,这是指当前对象,所以你想将当前对象作为参数传递给任何方法的任何地方,都要传递它。我希望这会有所帮助。如果你正确阅读了教程,你可以实际上理解。
答案 1 :(得分:2)
也许您将this()
与this
混淆。
第一个用于调用constrcutor。对于eaxmple,您可以提供初始化对象的默认构造函数。然后,您提供具有特殊功能的其他构造函数。您可以提供类似initialize()
函数的函数或调用特定的contstructor(在本例中为默认值),而不是重写初始化。
调用不同构造函数的示例:
public class TestClass
{
private int x;
private String s;
public TestClass()
{
x = 0;
s = "defaultvalue";
}
public TestClass(int iv)
{
this(); <-- Default constructor invoked
x = iv;
s = "defaultvalue1";
}
public TestClass(int iv, String sv)
{
this(iv); <-- int Constructor invoked, which in turn invokes the default constructor
s = sv;
}
}
第二个只是对当前对象的引用。如果你有一个实现某些接口的主类,然后将自己传递给使用这些接口的其他类,这非常有用。
示例伪代码以说明如何使用它:
class MyWindow
extends JPanel
{
private JButton mButton = new JButton("Sample");
....
public void addButtonPressedListener(ActionListener oListener)
{
mButton.addActionListener(oListener);
}
}
class Main
implements ActionListener
{
public Main()
{
MyWindow w = new MyWindow();
w.addButtonPressedListener(this);
}
public void actionPerformed(ActionEvent oEvent)
{
// Whenever the user presses that particular button in my mainwindow
// we get notified about it here and can do something about it.
System.out.println("Button in the GUI has been pressed");
}
}
答案 2 :(得分:2)
this
,正如其他人已经指出的那样,是指当前对象,用于将引用传递给自身。我只想说明一个例子,希望能为你清楚这一点。通常执行此操作的方案之一是事件处理或通知。
假设您有一个EntityManager
,并且您希望在添加或删除UpdateEvent
的任何时候触发Entity
。您可以在添加/删除方法中使用以下内容。
public class EntityManager implements ApplicationEventPublisher {
Set<Entity> entities = new HashSet<Entity>();
public void addEntity (Entity e) {
entities.add (e);
publishEvent (new UpdateEvent (this, UpdateType.ADD, e));
}
public void removeEntity (Entity e) {
if (entities.contains (e)) {
entities.remove (e);
publishEvent (new UpdateEvent (this, UpdateType.REMOVE, e));
}
}
protected void publishEvent (Event e) {
// handles the nitty-gritty of processing events
}
}
其中this
指的是事件源,它是对象本身。
因此,EntityManager
作为Event
的一部分传递,以便通知收件人稍后可以通过Event.getSource()
方法调用来访问它。