[英]Java - Using Instance Class from Static Method?
我已經使用.NET編程多年了,我正在嘗試使用一些簡單的入門程序。
我雖然有點麻煩......
當我使用public void main
創建我的啟動類時,編譯器不會讓我實例化我編寫的任何類?
我得到的錯誤是“非靜態變量_processor無法從靜態上下文引用”,其中_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()
{
}
}
}
Processor
是否是任何機會的內部類Lab
? (是的,既然你發布了你的代碼,我的懷疑得到了證實)。
在Java中, 非靜態內部類包含對外部類的包含對象的隱式引用 ,因此無法從靜態上下文(來自main
方法)實例化它們。
所以
Lab
實例(例如myLab
),然后調用myLab.new Processor()
,或者 Processor
靜態(如你所做),或 Processor
變成頂級課程。 這是你的問題嗎?
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
}
}
你應該從main調用一個構造函數:
public static void main(String[] args){
new MyClass();
}
並將您的實例化放在構造函數中。
但我不想讓我的所有課程都是靜態的。
根據我的經驗,Java中的大多數內部類都是靜態的。 如果您可以在單獨的文件中編寫內部類(它不直接使用包含類的成員),則應將其定義為static。 只是為了方便起見,Java允許您在其他類中編寫內部靜態類。
您的流程類是實驗室類的內部類,在實例化實驗室類的實例之前,不能創建流程類的實例,除非該內部類是靜態的或類似的東西。
Main將在您的實驗課中運行,因為它是靜態的,但是當您嘗試創建私有內部類的實例時,您不能因為此類是Lab的“私有內部”類,並且您沒有實驗室實例,因此您無法直接引用它。
您可以嘗試使您的處理器類保持靜態,或者至少公開,或者更好,但您可以首先實例化實驗室類的實例,並通過實例化實驗室類引用處理器類的創建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.