在Java中的main静态方法中调用非静态方法

时间:2013-11-27 03:29:04

标签: java oop static

所以我调用的是同一个类的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));
        }
}                                                             

7 个答案:

答案 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)

  1. 构造具有main方法的类的实例(可能在main()本身中),并在其上调用方法。

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

  2. 或者将hasAllUniqueChars()作为静态方法。

答案 6 :(得分:1)

在实例方法或构造函数中,this是对当前对象的引用,即non-static。您无法将non-static实例用于static方法。