簡體   English   中英

在Java中的主要靜態方法中調用非靜態方法

[英]Call a non-static method in main static method in Java

因此,我正在調用在同一類的main方法中定義的方法。 我使用'this'關鍵字引用可調用方法。 為什么不能在靜態main方法中調用此非靜態方法,如下所示?

通過選擇設計,一個相關但有點不同的問題是否有意義,即構造一個單獨的類來實現邏輯。 本質上,主類應該只有一個main方法來使事情保持簡單。 任何想法將不勝感激。

UniqueChars.java:8: non-static variable this cannot be referenced from a static context
        System.out.println(this.hasAllUniqueChars(input));
                           ^
1 error




public class UniqueChars {

        boolean hasAllUniqueChars(String input) {
                return false;
        }
        public static void main(String[] args) {
                String input = "Harry";
                System.out.println(this.hasAllUniqueChars(input));
        }
}                                                             

因為this是非靜態的。 this是一個實例 ,您不能在靜態方法中引用實例變量,因為static表示“整個類一個”。

您應該將hasAllUniqueChars方法hasAllUniqueChars static (例如static boolean hasAllUniqueChars(String input) ),因此您可以

System.out.println(UniqueChars.hasAllUniqueChars(input));

或者只是(因為您已經在上課)

System.out.println(hasAllUniqueChars(input));

您還可以使其保持非靜態,然后執行以下操作:

UniqueChars uc = new UniqueChars();
System.out.println(uc.hasAllUniqueChars(input));

您只能在對象的實例中使用“ this”。

因此,您需要制作一個UniqueChars對象,或者需要將hasAllUniqueChars設為靜態

因為在靜態方法中沒有this ,因為this引用當前實例(例如,該類的實例化對象)。

靜態方法沒有實例:這就是為什么它們被稱為靜態方法的原因。 它們位於類級別,並且不與任何實例關聯。

您應該(a)創建一個實例並在其上調用該實例方法,或者(b)使該方法靜態並且不要打擾。 如果該類不需要任何特定於實例的狀態,則最好使其變為靜態,例如,一種實用程序方法。

使用此代碼:

System.out.println(new UniqueChars().hasAllUniqueChars(input));

方法hasAllUniqueChars不是靜態的。 要使其成為靜態,您必須在名稱boolean之前放置static ,例如static boolean hasAllUniqueChars 靜態方法不需要實例就可以調用它們。 因此,您將其稱為UniqueChars.hasAllUniqueChars() 如果您不希望方法是靜態的,則需要創建UniqueChars類的新實例,然后對其進行調用。 正如其他人指出的那樣, new UniqueChars().hasAllUniqueChars()

  1. 構造具有main方法的類的實例(可能在main()本身中),然后在其上調用該方法。

    System.out.println(new UniqueChars()。hasAllUniqueChars(input));

  2. 或將hasAllUniqueChars()設為靜態方法。

在實例方法或構造函數中, this是對當前對象的引用,該對象non-static 您不能將non-static實例用於static方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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