【问题标题】:Is it possible to write Java code without public static void main(String[] args)?是否可以在没有 public static void main(String[] args) 的情况下编写 Java 代码?
【发布时间】:2021-01-02 20:13:48
【问题描述】:

我正在为一个非常基础/初学者的 Java 考试而学习,在查看一些示例代码时,我注意到一些没有包含该方法的代码:public static void main(String[] args)

这怎么可能?有什么我遗漏的吗?

我的教授上传的不带方法的示例代码示例:

public class Student {

  int midtermExam;
  int finalExam;
 
  double calcAvg() {
    double returnValue;
    returnValue = (midtermExam + finalExam) / 2.0;
    return returnValue;
  }

  char getLetterGrade() {

    char grade;
    double avg = (midtermExam + finalExam) / 2.0;
    // double avg = calcAvg();
    
    if (avg >= 90)
      grade = 'A';
    else
    if (avg >= 80)
      grade = 'B';
    else
    if (avg >= 70)
      grade = 'C';
    else
      grade = 'F';

    return grade;
  }

}

【问题讨论】:

  • 是的。像图书馆这样的东西没有主要的方法。 main 方法是程序的入口点,因此您必须有一个 main 方法 somewhere 否则代码将不会执行,但不一定在任何给定的 Java 文件中。
  • 例如,通常某种服务器容器将托管main,而您为应用程序编写本质上是库或插件的内容。
  • 啊好吧明白了,我的教授基本上好像写了一个java文件,但不一定是可执行代码。谢谢大家!!

标签: java main entry-point public-method


【解决方案1】:

试图涵盖基本概念:

1) 一个 JAVA 程序包含任意数量的类,但最多可以将一个类声明为公共类。

2) 如果有公共类,那么程序名和公共类名必须匹配,否则会出现编译错误。

3) Main() 方法与 JAVA 文件名没有关系。

当你编写没有 main() 方法的类时。它会编译得很好。

但是当你运行代码时会报错: NoSuchMethodError : 主要

示例:

Test.java

class A(){
    public static void main(String args[]){
    System.out.println("In class Main : A");
    }
}
class B(){
    public static void main(String args[]){
    System.out.println("In class Main : B");
    }
}
class C(){
    public static void main(String args[]){
    System.out.println("In class Main : C");
    }
class D(){
    }   

--------------------------------
Javac Test.java 
--> No Compile Time Error you will get

Java A
o/p : In class Main A

Java B
o/p : In class Main B

Java C
o/p : In class Main C

Java D
o/p : NoSuchMethodError : main

Java Test
o/p : NoClassdefFoundError : Test

--> Run Time error you will get.

当您创建 JAR 文件或构建的任何包时。不需要 main() 方法,因为您导入包或 .Jar 文件并在工作类中调用这些方法()。

当您运行应用程序并希望自动获取输出时。 public static void main(String[] args) 方法是编译器找到程序入口点的签名。

您的教授上传的代码只是一个类。它会编译得很好。 从上面的代码中,您可以在同一个文件中有许多 main() 方法。但是你必须运行特定的类。

尝试运行学生类:你会得到一个错误:在学生类中找不到主要方法,请将主要方法定义为:
public static void main(String[] args)

【讨论】:

    【解决方案2】:

    如果您使用的是 Java 9+,您可以从主方法中选择一个替代方法,即 JShell。

    这是一个交互式工具,可让您使用终端/cmd 就地评估代码。 也称为读取-评估-打印循环 (REPL),在输入声明、语句和表达式时对其进行评估并立即显示结果。

    在官方文档中有很好的解释:https://docs.oracle.com/javase/9/jshell/introduction-jshell.htm

    每当我想测试或探索新的 Java 功能时,我发现它很有用。

    【讨论】:

      【解决方案3】:

      public static void main(String[] args) 方法是标准 Java 应用程序的入口点。如果您想从命令行运行它,您至少需要一个使用此方法的类。在某些特殊情况下,如果 JAR 是一个库或包,它会以某种方式添加到另一个将使用它的应用程序中,那么您可以在没有此类入口点的情况下构建 JAR。但你现在不想详细说明。

      你看到的例子可能就是这样。例子。而且它们缺少入口点,因为它们不是完整的应用程序。你的教授上传的代码只是一个类。它无法执行。这只是一种展示课程的方式。

      【讨论】:

      • 解释得很好,非常感谢。
      【解决方案4】:

      在某个地方总是必须有一个main() 方法。它并不总是在您自己的代码中。如果您使用的是 Java 框架,main() 可能在框架代码中,而不是您自己的代码中。您的代码中还可以有多个main() 方法,但只有一个会用作您的程序的入口点以进行特定运行。每次运行 Java 程序时,您都在运行一个 main() 方法来启动程序。

      【讨论】:

        猜你喜欢
        • 2018-11-12
        • 2016-05-22
        • 2011-10-01
        • 1970-01-01
        • 2012-08-10
        • 1970-01-01
        • 2019-03-19
        • 2016-07-14
        • 2018-04-26
        相关资源
        最近更新 更多