[英]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()
。
構造具有main方法的類的實例(可能在main()本身中),然后在其上調用該方法。
System.out.println(new UniqueChars()。hasAllUniqueChars(input));
或將hasAllUniqueChars()設為靜態方法。
在實例方法或構造函數中, this
是對當前對象的引用,該對象non-static
。 您不能將non-static
實例用於static
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.