在 main 方法中没有静态键工作,在线程"main" java.lang.NoSuchMethodError: main



我找不到合适的原因。

 public class MainTest {    
    static public  void main(String[] args) {
            System.out.println("HAI");
    }
  }

当我运行这段代码时,输出是:HAI

static class MainTest { 
        static void main(String[] args) {
                System.out.println("HAI");
        }
      }

这段代码编译得很好。但是当我运行时,我得到异常Main method not public

public class MainTest { 
        public  void main(String[] args) {
                System.out.println("HAI");
        }
      }

这段代码编译得很好。但是当我运行时,我得到Exception

Exception in thread "main" java.lang.NoSuchMethodError: main

有人能解释一下这种行为的原因吗?

如果我没有指定static,为什么它不作为实例方法。当我不使用类外为什么我需要使主方法作为公共?如果因为静态主方法正在调用,我可以在任何静态方法中放置主方法逻辑而不使用主方法吗?

关键字public表示包含该方法的类之外的任何类都可以调用该方法。main就是这种情况,JVM的一些模糊对象需要调用这个类中的main方法。

关键字static表示该方法不需要它所在的类的任何特定属性。由于每个java程序开始时除了JVM中固有的对象之外没有创建任何对象,因此java开发人员决定将main设置为静态。

简而言之,永远不应该出现main必须是类的实例方法的情况,因为必须首先创建这个类,并且在实际调用main函数之前没有办法告诉JVM。

public static void main(String args[])

您应该始终包含3个关键字:public, static和void

如果一个方法没有任何说明符(如您的第二个示例),那么它只能由同一包(同一文件夹)中的其他java文件访问。当JVM试图运行您的代码时,这会导致问题,因为它不是该包的一部分。

要理解第三点,必须理解实例方法是如何工作的。它们只能在实例上调用——因此JVM必须在调用main之前使用构造函数实例化您的类。Java的设计者认为要求main是静态的会更简单,所以如果它不是静态的就会导致错误。

相关内容

  • 没有找到相关文章

最新更新