2012-04-17 49 views
1

我一直在使用.NET進行編程多年,並且正在嘗試用一些簡單的入門程序嘗試Java。Java - 從靜態方法使用實例類?

我有一點麻煩,雖然

...

當我創建public void main我開始補課,編譯器不會讓我實例化任何我寫的類?

我得到的錯誤是「非靜態變量_processor不能從靜態上下文中引用」,其中_processor是我試圖從我編寫的處理器類實例化的對象。

當我將Processor更改爲靜態類時,程序將編譯並運行得很好,但我不想讓所有的類都靜態化。

任何方法?

在此先感謝!

這裏是我寫的所有內容。它不會在當前狀態下編譯:

class Lab 
{ 
    public static void main(String[] args) 
    { 
     Processor proc = new Processor(); 

     proc.Go(); 
    } 

    private class Processor 
    { 
     private Random _rand = new Random(); 

     public void Processor() {} 

     public void Go() 
     { 

     } 
    } 
} 
+3

如果您向我們展示您的代碼,這將有所幫助。 – 2012-04-17 17:02:31

+0

在此處放置代碼將有助於更好地理解問題。 – Bajji 2012-04-17 17:03:46

+0

這不是*你寫的所有東西 - 錯誤信息是指'_processor',但是這不會出現在你顯示的代碼中。 – 2012-04-17 17:06:15

回答

2

Processor一個內部類的Lab任何機會? (是的,現在你已經發布了你的代碼,我的懷疑被證實了)。

在Java中,nonstatic inner classes contain an implicit reference to the containing object of the outer class,因此它們不能從靜態上下文(從您的main方法)實例化。

所以

  • 要麼創建的Lab一個實例(例如myLab),然後調用myLab.new Processor(),或
  • 聲明Processor靜態的(像你一樣),或
  • Processor成頂級類。
+0

完美!謝謝。 – 2012-04-17 17:08:18

0

你應該從主調用構造函數:

public static void main(String[] args){ 
new MyClass(); 
} 

並把您的實例構造函數。

1

這是你的問題,任何機會?

public class DemoClass{ 

    String field; 

    public static void main(String[] args){ 
    field = "Hey"; //forbidden - can't access instance field from static context 
    DemoClass dc = new DemoClass(); 
    dc.field = "Hey"; //this is ok 
    } 

} 
0

,但我不希望有讓我所有的類的靜態。

根據我的經驗,Java中的大多數內部類都是靜態的。如果你可以在一個單獨的文件中編寫一個內部類(它不直接使用包含類的成員),那麼它應該被定義爲靜態的。 Java真的只是爲了方便,讓你在其他類中編寫內部靜態類。

0

你的進程類是你的實驗類的內部類,除非你的實例類實例化了,否則你不能創建你的進程類的一個實例,除非這個內部類是靜態類。

主要運行在您的實驗室類中,因爲它是靜態的,但是當您嘗試創建私有內部類的實例時,您不能因爲此類是Lab的「私有內部」類,而您沒有實驗室實例,所以你不能直接引用它。

你可以試着讓你的處理器類是靜態的,或者至少是公開的,或者更好的是你可以首先實例化你的實驗類的實例,並且通過實例化實驗類來引用處理器類的創建。

相關問題