java - 在 Java 的主要静态方法中调用非静态方法

标签 java oop static

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

关于java - 在 Java 的主要静态方法中调用非静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20233345/

相关文章:

java - 我是否有重新排序问题,是否由于引用转义?

c# - 如何建模对象以随时间跟踪设备/ Assets ?

c# - 为什么字段可以用作 out/ref 参数而不是属性?

java - 在 java 18 版本中不使用 main 方法时我没有收到任何错误

opencv - Linux上的OpenCV编译:如何向其提供特定的zlib lib?

java - GoogleMap addPolygon 引发有关空列表的异常

java - 如何从Java中的字符串中删除尖音符号?

java - 使用 iText 许可证将 java 应用程序导出到 jar

php - 如何检查一个类是否属于某个命名空间

c++ - 分配 vector 的前缀和并将结果存储在静态 vector 中