2012-11-23 92 views
-3

參考每當我嘗試調用一個方法主要是給我的錯誤非靜態方法不能從靜態上下文

非靜態方法不能從s靜態上下文

參考

我試圖在主中創建對象,並將它們作爲參數發送給方法,但它也不起作用。

+2

顯示代碼... –

+0

而你的問題是什麼?此外,這是一個相當基本的問題 - 從這裏開始:http://docs.oracle.com/javase/tutorial/。請在Google上提供代碼 – home

+0

搜索,並從一個很好的教程開始。 Oracle教程將是一個很好的起點。 –

回答

1

main是一種靜態方法。 public static void main(String[] args)

從靜態方法或阻止任何其他靜態方法以及靜態實例的訪問。如果你想訪問非靜態方法或實例,你必須創建對象並通過引用訪問。

public class Test{ 
    public static void main(String[] args){ 
     print();// static method call 
     Test test = new Test(); 
     test.print();// non static method call 
    } 
    public void print() { 
     System.out.println("Hello non static"); 
    } 
    public static void print() { 
     System.out.println("Hello static"); 
    } 
} 
+0

可能想擴大 – arshajii

1

您需要類的實例訪問(調用)非靜態方法靜態方法。非靜態方法或實例方法被限制在一個類的不存在。

下面是簡單的例子,其描述它:

class Test { 
public void nonStaticMethod() { 
} 
public static void main(String[] args) { 
Test t = new Test(); //you need to create an instance of class Test to access non-static methods from static metho 
t.nonStaticMethod(); 
} 

},創建對象時

0

常規方法被實例化,但是這不是必需的用於static方法。如果您使用的是static方法,則不能保證非靜態方法已經實例化(即,可能沒有創建Object),所以編譯器不允許它。

3
public class Foo { 
    public static void main(String[] args) { 
     Foo foo = new Foo(); 
     foo.print(); 
    } 
    public void print() { 
     System.out.println("Hello"); 
    } 
} 
相關問題