【问题标题】:Compile error during compilation of my simple Java file编译我的简单 Java 文件时出现编译错误
【发布时间】:2012-10-29 00:23:48
【问题描述】:

我编写了一个简单的java程序,如下所述。不幸的是发生了编译错误。

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

在命令提示符下编译期间会出现以下内容:

c:\Java>java 字符串 错误:在 String 类中找不到主方法,请将主方法定义为: public static void main(String[] args)

它不适用于我的任何程序,即使是这个简单的程序!这是为什么呢?

编辑:

现在我有:

import java.lang.*;
import java.lang.String.*;

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

而且它不工作。为什么这不起作用?

它说的和以前一样。

您所说的 Java.lang.String[] 有效,但为什么不能呢?为什么我以前不需要穿上这些?

【问题讨论】:

  • 你为什么给班级打电话String?
  • 什么不起作用?有什么错误?你还记得重命名你的 .java 文件吗?

标签: java compilation compiler-errors


【解决方案1】:

这可能是因为您的班级使用名称String,与java.lang.String 冲突;换句话说,您已经编写了您的主方法将您的类的实例作为输入,而不是主方法需要采用的实例,即java.lang.String。尝试任一

  1. 重命名您的班级
  2. 将您的签名更改为public static void main(java.lang.String[] args) {

【讨论】:

  • 第二点没用。问题是有一个String 类。 JVM 抱怨是因为已经加载了一个 String 类(是的,java.lang.String 类)。
  • 我不同意。事实上,编译器并没有抱怨。抱怨的是虚拟机,因为没有 main(java.lang.String[])。我认为#2才是真正的重点。
【解决方案2】:

你不应该调用你的类 String,它会与 java 类 String 冲突。

或者,您可以将代码更改为:

class String {
    public static void main(java.lang.String[] args) {
         System.out.println("stre");
    }
}

【讨论】:

    【解决方案3】:
    1. 不要创建名为“String”的 java 文件,因为它是 java.lang.String 中的 java 库类
    2. 将课程设为公开

    所以,编写你的源代码如下:

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

    现在编译。我相信它会运作良好。

    【讨论】:

      【解决方案4】:

      1) 班级应该是public

      2) 避免称你为String 类,因为它与java.lang.String 有重名(你仍然可以,但不好)。否则,您的主要方法的参数类型错误。

      3) 您不必从 java.lang 包中显式导入。


      public class String {
          public static void main(java.lang.String[] args) {
               System.out.println("stre");
          }
      }
      

      或

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

      尝试使用第二种形式。

      【讨论】:

        【解决方案5】:

        好吧,给你的类名String 然后调用main(String[] args) 是模棱两可的,如果它意味着java.lang.String 或你新定义的类,但是使用java 范围规则,除非另有声明,否则它将使用你的。


        编辑后更新

        没有java.lang.String包,但它是一个类。因此,你不能说

        import java.lang.String.*;
        

        通过添加“.*”,编译器了解到这是指某个包String。

        一个例外是静态导入,但这不是您需要的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-11
          • 2015-05-24
          • 2019-10-25
          相关资源
          最近更新 更多