簡體   English   中英

Java - 使用靜態方法的實例類?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM