所以我调用的是同一个类的main方法中定义的方法。我使用'this'关键字引用可调用方法。为什么我不能在静态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));
}
}
答案 0 :(得分:3)
因为this
是非静态的。 this
是实例,并且您无法在静态方法中引用实例变量,因为static
表示“整个类中的一个。”
你应该制作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));
答案 1 :(得分:2)
您只能在对象的实例中使用“this”。
所以你需要制作一个UniqueChars对象,或者你需要使hasAllUniqueChars静态
答案 2 :(得分:2)
因为静态方法中没有this
,因为this
引用当前实例(例如,该类的实例化对象)。
静态方法没有实例:这就是为什么他们称之为静态方法。他们住在班级,与任何实例都没有联系。
您应该(a)创建一个实例并在其上调用实例方法,或者(b)使该方法保持静态并且不要打扰。如果该类不需要任何特定于实例的状态,那么也可以将其设置为静态,例如,实用程序方法。
答案 3 :(得分:2)
使用此代码:
System.out.println(new UniqueChars().hasAllUniqueChars(input));
答案 4 :(得分:1)
方法hasAllUniqueChars
不是静态的。要使其成为静态,您必须在名称static
之前添加boolean
,例如static boolean hasAllUniqueChars
。静态方法不需要实例就可以调用它们。所以你可以称之为UniqueChars.hasAllUniqueChars()
。
如果你不希望方法是静态的,那么你需要创建UniqueChars
类的新实例然后调用它。其他人指出new UniqueChars().hasAllUniqueChars()
。
答案 5 :(得分:1)
构造具有main方法的类的实例(可能在main()本身中),并在其上调用方法。
System.out.println(new UniqueChars()。hasAllUniqueChars(input));
或者将hasAllUniqueChars()作为静态方法。
答案 6 :(得分:1)
在实例方法或构造函数中,this
是对当前对象的引用,即non-static
。您无法将non-static
实例用于static
方法。