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

问题描述 投票:0回答:5

我正在准备一个非常基础/初学者的 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;
  }

}
java program-entry-point entry-point public-method
5个回答
1
投票

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

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


0
投票
某个地方总是必须有一个

main()

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


0
投票
如果您使用的是 Java 9+,则可以使用主方法的替代方法,即 JShell。

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

官方文档中有很好的解释:

https://docs.oracle.com/javase/9/jshell/introduction-jshell.htm

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


0
投票

尝试涵盖基本概念:

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

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 文件并在工作类中调用这些 method() 。

当您运行应用程序并希望自动获取输出时。

public static void main(String[] args)

方法是编译器找到程序入口点的签名。

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

尝试运行Student类:你会得到一个

错误:在Student类中找不到Main方法,请将main方法定义为: 公共静态无效主(字符串[] args)


0
投票
隐式声明的类和实例主要方法

作为为学习 Java 的人

铺平入口的一部分,您可以预览Java 22中的新功能,以缩短main

的声明:

class HelloWorld { void main() { System.out.println("Hello, World!"); } }
您甚至可以删除其包含类的名称。以下是 

entire .java

 文件的示例:

void main() { System.out.println("Hello, World!"); }
请参阅 

JEP 463:隐式声明的类和实例主要方法(第二次预览)

© www.soinside.com 2019 - 2024. All rights reserved.