2011-08-25 161 views
3

我對此有點困惑,而且我瀏覽這裏的建議答案並沒有產生在我的上下文中工作的直接結果。從靜態上下文中訪問非靜態方法

我的問題是基本的。讓我們假設我有一個類似這樣的方法。

private int someFunction(int x, int y){ 
    return (x+y+5) 
} 

,但我想打電話從主此功能(public static void main(String args[]))。我會如何做呢?

如果你認爲會幫助我在這種情況下,我將不勝教程也能欣賞

回答

8

該功能不需要訪問任何成員變量,所以你可以聲明爲靜態的方法:

private static int someFunction(int x, int y) { 
     ^^^^^^ 
    return (x+y+5) 
} 

這允許您使用someFunction(arg1, arg2)YourClass.someFunction(arg1, arg2)main調用它。


如果方法實際上確實需要訪問成員變量(和/或this參考),你不能聲明方法是靜態的。在這種情況下,你必須創建一個實例類的包含方法,以便把它叫做:

new YourClass().someFunction(0, 1); 

或者(如果需要實例後重新使用)

YourClass x = new YourClass(); 
x.sumFunction(0, 1); 
0

您必須先創建實例。根據定義,不能從靜態上下文訪問實例方法(非靜態方法)。

因此,例如,如果你有類MyApp的包含someFunction()main(String[] args)執行以下步驟,你的主要方法:

new MyApp().someFunction(1, 2);

0

基本上,你只能叫從對象[實例非靜態方法一個班級]而不是班級本身。

查看Sun Java教程,瞭解對象和類之間差異的解釋,如果您有點困惑 - 這是一個非常重要的概念!

如果不引用任何局部變量,或者創建類的實例以便能夠在本地調用它,則可以使該函數成爲靜態函數。

0

由於您的方法someFunction不是靜態的,您將無法從靜態環境i:e main()中調用此方法。 1.這樣就可以使someFunction

static private someFunction() 

2.or可以創建一個從主對象()並調用someFunction這樣的:

一個一個新= A();
a。someFunction(4,5);

1

您需要有一個特定方法所屬類的實例調用實例方法。

在你的情況,

新MyClass的()someFunction(5,6)。

相關問題