是否可以在没有 public static void main(String[] args) 的情况下编写 Java 代码?

Is it possible to write Java code without public static void main(String[] args)?

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

这怎么可能?有什么我想念的吗?

我的教授在没有使用方法的情况下上传的示例代码示例:

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()方法。它并不总是在您自己的代码中。如果您使用的是 Java 框架,则 main() 可能在框架代码中而不是您自己的代码中。您的代码中也可以有多个 main() 方法,但只有一个方法会用作特定 运行 程序的入口点。每次你 运行 一个 Java 程序时,你 运行 只使用一种 main() 方法来启动程序。

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

你看到的例子大概就是这些。例子。而且它们缺少入口点,因为它们不是完整的应用程序。你教授上传的代码只是一个Class。它无法执行。这只是一种显示 class.

的方式

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

这是一个交互式工具,允许您使用 terminal/cmd 评估代码。 也称为 Read-Evaluate-Print 循环 (REPL),在输入声明、语句和表达式时计算它们并立即显示结果。

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

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

试图涵盖基本概念:

1) 一个JAVA程序包含任意数量的class,但最多有一个class可以声明为public。

2)如果有publicclass,那么程序名和publicclass必须匹配other-wise 我们得到编译时错误。

3) JAVA 文件的 Main() 方法和名称没有关系。

当您在没有 main() 方法的情况下编写 class 时。它会编译好的。

但是当你运行代码时它会报错: 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 文件并在工作 class.

中调用这些 method()

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

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

尝试 运行 Student class :你会得到一个 Error: Main method not found in class Student,请将 main 方法定义为:
public static void main(String[] args)