Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 理解如何调用非静态方法的问题_Java_Libreoffice - Fatal编程技术网

Java 理解如何调用非静态方法的问题

Java 理解如何调用非静态方法的问题,java,libreoffice,Java,Libreoffice,我正在阅读libreoffice的Java代码,有一件事我真的不明白。 该方法调用该方法2次,并将向量变量作为参数传递,但该方法不接受任何参数。有人能解释一下这个参数的作用吗?如果以这种方式调用updateUI(): UnoDataAware.updateUI(); 它抱怨说: 无法从静态上下文引用非静态方法 updateUI()是一个实例方法,因此您必须从实例调用它,而updateUI(Collection dataAwares)是一个静态方法,直接从类调用 来自同一来源: 对象。 202

我正在阅读libreoffice的Java代码,有一件事我真的不明白。 该方法调用该方法2次,并将向量变量作为参数传递,但该方法不接受任何参数。有人能解释一下这个参数的作用吗?如果以这种方式调用updateUI():

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();
         }