Java 理解如何调用非静态方法的问题
我正在阅读libreoffice的Java代码,有一件事我真的不明白。 该方法调用该方法2次,并将向量变量作为参数传递,但该方法不接受任何参数。有人能解释一下这个参数的作用吗?如果以这种方式调用updateUI():Java 理解如何调用非静态方法的问题,java,libreoffice,Java,Libreoffice,我正在阅读libreoffice的Java代码,有一件事我真的不明白。 该方法调用该方法2次,并将向量变量作为参数传递,但该方法不接受任何参数。有人能解释一下这个参数的作用吗?如果以这种方式调用updateUI(): UnoDataAware.updateUI(); 它抱怨说: 无法从静态上下文引用非静态方法 updateUI()是一个实例方法,因此您必须从实例调用它,而updateUI(Collection dataAwares)是一个静态方法,直接从类调用 来自同一来源: 对象。 202
UnoDataAware.updateUI();
它抱怨说:
无法从静态上下文引用非静态方法
updateUI()
是一个实例方法,因此您必须从实例调用它,而updateUI(Collection dataAwares)
是一个静态方法,直接从类调用
来自同一来源:
对象。
202*/
updateUI()
是一个实例方法,因此您必须从实例调用它,而updateUI(Collection dataAwares)
是一个静态方法,直接从类调用
来自同一来源:
对象。
202*/
你看错线了
请看第行,这是调用的方法。您看错了行
请看第行,这是正在调用的方法。在您提供的第二个链接中还有另一个方法:(第203行) 这是被调用了2次的方法。静态意味着您必须指定类名才能调用它。除非你是那个班的一员
Users.getFirstName()(示例)在您提供的第二个链接中还有另一个方法:(第203行) 这是被调用了2次的方法。静态意味着您必须指定类名才能调用它。除非你是那个班的一员
Users.getFirstName()(示例)我认为交叉引用的东西很糟糕。以下是您正在寻找的方法:
我认为交叉引用的东西不好。以下是您正在寻找的方法:
这是调用的函数:
publicstaticvoidupdateui(collectiondataawares)
不是
public void updateUI()
这是调用的函数:
publicstaticvoidupdateui(collectiondataawares)
不是
public void updateUI()
调用此方法的静态版本时,您没有在实例化对象的上下文中使用它。这就是您需要将参数传递给静态方法的原因,以便它知道要更新UI的对象
该参数将允许静态的
updateUI
方法遍历DataAware对象的集合,并从非静态上下文调用它们的updateUI
方法。这意味着no参数updateUI
不需要对对象的引用,因为它属于一个对象。当您调用此方法的静态版本时,您没有在实例化对象的上下文中使用它。这就是您需要将参数传递给静态方法的原因,以便它知道要更新UI的对象
该参数将允许静态的
updateUI
方法遍历DataAware对象的集合,并从非静态上下文调用它们的updateUI
方法。这意味着no参数updateUI
不需要引用对象,因为它属于一个对象。Static并不意味着您必须在调用它之前指定类名,它只是意味着您可以指定类名。您可以执行someInstance.someStaticMethod()代码>。但是,在“静态上下文”(即静态方法的主体)中,不能引用实例成员。也就是说,您不能执行静态void someMethod(){someNonStaticMethod();}
。这是因为没有指定要调用someNonStaticMethod
的实例。静态并不意味着您必须在调用它之前指定类名,它只是意味着您可以指定类名。您可以执行someInstance.someStaticMethod()代码>。但是,在“静态上下文”(即静态方法的主体)中,不能引用实例成员。也就是说,您不能执行静态void someMethod(){someNonStaticMethod();}
。这是因为没有指定要调用someNonStaticMethod
的实例。
/**
199 * given a collection containing DataAware objects,
200 * calls updateUI() on each memebr of the collection.
201 * @param dataAwares a collection containing DataAware
public static void updateUI(Collection dataAwares) {
for (Iterator i = dataAwares.iterator(); i.hasNext();)
((DataAware) i.next()).updateUI();
}