请阅读以下教程的第 4 点(This 关键字的使用)
http://www.javatpoint.com/this-keyword
如何this
成为方法的形式参数。
在构造函数的情况下,如果构造函数类似于 - Const(OBJECT obj),我们可以传递this
, 只是为了调用构造函数..
this
在方法中作为实际参数传递会派上用场的可能场景有哪些?
请阅读以下教程的第 4 点(This 关键字的使用)
http://www.javatpoint.com/this-keyword
如何this
成为方法的形式参数。
在构造函数的情况下,如果构造函数类似于 - Const(OBJECT obj),我们可以传递this
, 只是为了调用构造函数..
this
在方法中作为实际参数传递会派上用场的可能场景有哪些?
您可以从构造函数调用 this 以调用其他构造函数(基于调用,例如 this() :您正在调用默认构造函数, this(param) 您正在调用参数化构造函数。现在 this 作为参数,底线是,this指的是当前对象,所以在你想将当前对象作为参数传递给任何方法的任何地方,传递这个。我希望这对你有帮助。如果你正确阅读教程,你实际上可以理解。
也许你this()
对this
.
第一个用于调用构造函数。例如,您可以提供一个初始化对象的默认构造函数。然后,您提供具有特殊功能的其他构造函数。您可以提供initialize()
函数之类的东西或调用特定的构造函数(在本例中为默认构造函数),而不是重写初始化。
调用不同构造函数的示例:
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");
}
}
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
}
}
wherethis
指的是对象本身的事件源。
因此,EntityManager
被作为的一部分传递,Event
以便通知接收者稍后可以通过Event.getSource()
方法调用来访问它。