【问题标题】:Does every program in Java require a class?Java中的每个程序都需要一个类吗?
【发布时间】:2011-07-09 10:19:31
【问题描述】:

每个 Java 程序都需要 至少存在一个类。

上述说法总是正确的吗?

【问题讨论】:

  • 始终如此,对于核心和企业 Java 以及所有其他类型也是如此。
  • 在加载一个空的 mian(String[]) 方法之前,您需要先加载 Object 和 String,这使得三个 ;)
  • @Peter:java.* 包中大约有 200 个类;查看我的更新答案。

标签: java


【解决方案1】:

是的,你需要至少一个类来拥有一个程序,但是,你不需要任何方法(与其他一些答案相反)。

之所以需要类是因为在 Java 中,所有代码都在类中。因此,要拥有任何代码,您需要一个类。但是,代码不一定需要在方法中。它也可以在初始化程序中。所以,这是一个没有方法的完整 Java 程序:

class LookMaNoMethods {
    static {
        System.out.println("Hello, world!");
        System.exit(0);
    }
}

这给了...

$ javac LookMaNoMethods.java 
$ java LookMaNoMethods 
Hello, world!
$ 

编辑:从 Java 7 开始,上面只有静态块且没有 main 方法的代码不会产生任何输出。主要方法现在是强制性的。没有main方法的代码虽然编译成功。

【讨论】:

  • 有趣。即使没有 main 方法,具有静态初始化程序的类也是有效的程序,如果没有静态初始化程序,则再次需要该方法。我想知道标准对入口点的要求到底是什么意思。
  • 静态块在内部被实现为一种特殊的方法(“”)。至少AFAIK。但仍然是一个很好的答案,我从来没有意识到你也可以在没有 main() 的情况下启动一个方法......很高兴知道。
  • 这个程序之所以有效,是因为静态初始化程序在显示缺少 main 方法的错误消息之前调用了System.exit()
  • @Paŭlo Ebermann,是的,这是正确的,但它仍然是有序的,而不是一场比赛。该类显然是在任何尝试调用 main 之前加载的。
【解决方案2】:

从JVM的角度来看;是的。从程序员的角度来看,它可以是 Class 或 Enum。

public enum AAA {

    AAA;

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

}

编辑:即使您有一个带有空 main 方法的类,也有很多核心类在幕后工作以运行您的“空”类。可以通过设置-verbose:class JVM 参数查看这些类的列表(java.* 包中的大约 200 个)。

【讨论】:

【解决方案3】:

程序需要一个入口点。入口点必须是一种方法。在 Java 中,每个方法都必须包含在一个类中。

这意味着每个程序都必须至少有一个类。

【讨论】:

  • 这是一个非常合理的答案,但“入口点必须是方法”并非完全正确。有关不是方法的入口点,请参阅我的答案。
【解决方案4】:

是的。在 Java 中,您总是需要一个具有 main 函数的类来让 JRE 运行它。

【讨论】:

  • 这不是原因。 Ruby 也是面向对象的,但它不需要任何类。原因只是“因为”。
  • 嗯,我同意这暗示是不正确的。 'sun 想要这样怎么样?'/.
  • Groovy(显然建立在 JVM 之上)不需要运行任何类。但是生成的字节码在幕后定义了类。
  • @Konrad - 声明并不是所有面向对象的语言都需要一个类,只有 Java。与 Java 不同,将函数作为一等对象的其他语言可能看起来允许函数作为入口点,但它们仍然是下面的类。
  • @duffymo 好吧,那是在@Konerak 改变答案之前。目前的答案是正确的。
【解决方案5】:

是的,你至少需要一堂课。

【讨论】:

    【解决方案6】:

    JAVA 要求程序中至少有一个类,因为在执行 Java 程序时,我们需要提供包含 main () 方法的类的名称。
    因此,必须为 Java 程序提供至少一个类名。 例如--->`

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

    所以,javac _____(“这里我们必须给出我们保存的java程序的名称”)

    java ______ ("提供包含 main() 方法的类的名称")

    --> 根据我们的程序

    javac Hello(这里我用Hello.java保存程序名)

    java Test(因为Test类包含main()方法)

    谢谢

    【讨论】:

      猜你喜欢
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 2017-12-19
      • 2013-08-05
      • 1970-01-01
      相关资源
      最近更新 更多