【问题标题】:Java NoSuchMethodError: main [duplicate]Java NoSuchMethodError:主要[重复]
【发布时间】:2012-08-12 11:07:40
【问题描述】:

我正在通过终端在 OS X 上学习 Java。当我编译下面的代码时,我没有收到任何错误,但是当我尝试运行它时,我得到了

线程“main”中的异常 java.lang.NoSuchMethodError: main

我的代码:

public class Problem5{
public void main(String[] args) {
    int n = 1;
    while(!checkMod(n)){
        n++;
    }

}
public boolean checkMod(int in)
{
    int count = 0;
    for(int i=1; i<20; i++)
    {
        if(in%i == 0)
        {
            count = count + 1; 
        }
    }
    if(count ==19)
    {
        return true;
    }
    else{
        return false;
    }
}
}

我从 main 方法中删除了“静态”,因为我正在调用 checkMod 方法。

如何正确编码?

谢谢

【问题讨论】:

  • 你用什么命令从终端运行类?
  • mac:Java 名称$javac Problem5.java mac:Java 名称$java Problem5
  • 你为什么要使用终端。而是使用 Eclipse 或 Netbeans。
  • 将主方法声明为静态并调用带有对象的 checkmod 方法,因为您不能从静态方法调用非静态方法..
  • return count == 19; 更具可读性(恕我直言)

标签: java macos


【解决方案1】:

主要需要static:public static void main(String[] args)

【讨论】:

    【解决方案2】:

    您需要在 main 和 checkMod 上声明“静态”。

    【讨论】:

      【解决方案3】:

      “入口点”方法是静态 main 而不是 main。他们有不同的方法签名。 JVM 只会搜索静态 main。 你可以让你的

      public boolean checkMod(int in)
      

      作为

      static public boolean checkMod(int in)
      

      【讨论】:

        【解决方案4】:

        您还需要将checkMod 设为静态,因为您是从另一个静态方法调用它。您不能从静态方法调用实例方法:

        public class Problem5{
        public static void main(String[] args) {
            int n = 1;
            while(!checkMod(n)){
                n++;
            }
        
        }
        public static boolean checkMod(int in)
        {
            int count = 0;
            for(int i=1; i<20; i++)
            {
                if(in%i == 0)
                {
                    count = count + 1; 
                }
            }
            if(count ==19)
            {
                return true;
            }
            else{
                return false;
            }
        }
        }
        

        【讨论】:

          【解决方案5】:

          每个可执行的 Java 程序至少需要一个实现 public static void main(String args[]) 的类才能运行。

          而不是从main 中删除static 引用

          static 添加到public boolean checkMod(int in)public static boolean checkMod(int in)

          从实例级别调用方法checkMod

          public class Problem5{
              public void main(String[] args) {
                  new Problem5();
              }
          
              public Problem5() {
                  int n = 1;
                  while(!checkMod(n)){
                      n++;
                  }
          
              }
          
              // Rest of code...
          }
          

          【讨论】:

          • 感谢您的信息!这真的很有帮助。你什么时候想创建一个实例而不是有几个静态方法?
          • static 引用对于实用程序方法非常有用,这些方法不需要引用任何实例对象、方法或变量。当您需要多个对象实例时,您想使用实例,例如Person。如果Person 类仅使用static 引用,您的程序将毫无用处,您只能拥有一个Person,但是,您可以使用static 方法来计算年龄,基于Person 的出生日期
          【解决方案6】:

          static 是 main 方法所必需的。你可以使用这样的东西来为你的主执行添加状态:

          public class Problem5 {
            public static void main(String[] args) {
              new Problem5().start();
            }
          
            private void start() {
              int n = 1;
              while(!checkMod(n)){
                n++;
              }
            }
          
            private boolean checkMod(int in) {
              ..
            }
          }
          

          另一方面,您的 checkMod(int) 方法不需要状态。您也可以添加 static 关键字。然后可以通过静态 main 方法调用它。

          【讨论】:

            【解决方案7】:

            主方法应始终声明为static。此外,您正在主方法中访问checkMod,因此要么将checkMod 也声明为static,要么使用对象访问它,因为您无法从静态方法访问非静态方法。

            尝试关注。

            public class Problem5{
            public static void main(String[] args) {
                int n = 1;
                while(!new Problem5().checkMod(n)){
                    n++;
                }
            
            }
            public boolean checkMod(int in)
            {
                int count = 0;
                for(int i=1; i<20; i++)
                {
                    if(in%i == 0)
                    {
                        count = count + 1;
                    }
                }
                if(count ==19)
                {
                    return true;
                }
                else{
                    return false;
                }
            }
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-02-28
              • 2021-09-08
              • 2014-06-08
              相关资源
              最近更新 更多