我正在閱讀libreoffice的Java代碼,並且有一件事我不是很瞭解。 方法updateUI()調用2次方法updateUI並將它們作爲參數傳遞給Vector變量,但此方法不接受任何參數。任何人都可以解釋我這個參數的作用?如果updateUI()被調用是這樣的:瞭解如何調用非靜態方法的問題
UnoDataAware.updateUI();
它抱怨說:
非靜態方法不能從靜態上下文
我正在閱讀libreoffice的Java代碼,並且有一件事我不是很瞭解。 方法updateUI()調用2次方法updateUI並將它們作爲參數傳遞給Vector變量,但此方法不接受任何參數。任何人都可以解釋我這個參數的作用?如果updateUI()被調用是這樣的:瞭解如何調用非靜態方法的問題
UnoDataAware.updateUI();
它抱怨說:
非靜態方法不能從靜態上下文
updateUI()
是一個實例方法所引用,所以你必須從一個實例中調用它,而updateUI(Collection dataAwares)
是一個靜態方法,並且直接從該類中調用。
而從同一來源:
/** 199 * given a collection containing DataAware objects, 200 * calls updateUI() on each memebr of the collection. 201 * @param dataAwares a collection containing DataAware
對象。 202 */
您正在看錯行。
看線203,這就是被調用的方法。
有一個在你提供的第二連桿的另一方法:(線203)
public static void updateUI(Collection dataAwares) {
for (Iterator i = dataAwares.iterator(); i.hasNext();)
((DataAware) i.next()).updateUI();
}
這是方法正被稱爲2次。靜態意味着您必須先指定類名稱,然後才能調用它。除非你是那個班的一部分。
Users.getFirstName()(例如)
我想說的交叉引用啄壞。這裏就是你正在尋找的方法:
這也就是所謂的功能:
public static void updateUI(Collection dataAwares)
不
public void updateUI()
當你調用靜態版本這種方法你沒有在實例化的上下文中使用它目的。這就是您需要將參數傳遞給靜態方法的原因,以便它知道要更新UI的對象。
該參數將允許靜態updateUI
方法通過DataAware對象的集合迭代,並從非靜態上下文調用他們updateUI
方法。這意味着無參數updateUI
不需要對該對象的引用,因爲它屬於一個對象。
靜態並不意味着你必須指定類的名稱,然後才能調用它,它只是意味着你*可以*指定類的名稱。你可以做'someInstance.someStaticMethod();'。但是,在「靜態上下文」(即靜態方法的主體)內,不能引用實例成員。也就是說,你不能'static void someMethod(){someNonStaticMethod(); }'。這是因爲沒有指定實例來調用'someNonStaticMethod'。 – 2011-06-07 17:44:13