-4

我无法找到正确的原因。

 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 in thread "main" java.lang.NoSuchMethodError: main

有人可以解释这种行为的原因。

如果我没有指定 static 为什么它不作为实例方法。当我不在课堂外使用时,为什么我需要将主要方法设为公开?如果由于调用了静态主方法,我可以将主方法逻辑放在任何静态方法中而不使用主方法吗?

4

3 回答 3

2

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

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

简而言之,不应该存在 main 需要是类的实例方法的情况,因为必须首先创建该类,并且在实际调用 main 函数之前无法将其告知 JVM。

于 2013-05-08T02:13:21.903 回答
1

公共静态无效主(字符串参数 [])

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

于 2013-05-08T02:08:22.580 回答
1

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

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

于 2013-05-08T02:09:46.837 回答