在main方法中使用out static关键字获取异常线程“main”中的异常java.lang.NoSuchMethodError:main

时间:2013-05-08 02:05:50

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

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

如果我没有指定静态,为什么它不采用实例方法。 当我不在课外使用为什么我需要将主方法公之于众? 如果因为静态main方法调用我可以将main方法逻辑放在任何静态方法中而不使用main方法吗?

3 个答案:

答案 0 :(得分:2)

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

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

简而言之,永远不应该出现main需要成为类的实例方法的情况,因为必须首先创建该类,并且在实际调用之前无法将其告知JVM主要功能。

答案 1 :(得分:1)

public static void main(String args [])

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

答案 2 :(得分:1)

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

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