是否可以在没有公共静态void mainString [] args的情况下编写Java代码?

问题描述

我正在为一个非常基础/初学者的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()方法。它并不总是在您自己的代码中。如果您使用的是Java框架,则main()可能在框架代码中,而不是您自己的代码中。您的代码中也可以有多个main()方法,但是只有一种方法可以用作特定运行的程序入口点。每次您运行Java程序时,您实际上都在运行一种main()方法来启动该程序。

,

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

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

,

如果您使用的是Java 9+,则主要方法是JShell。

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

在官方文档https://docs.oracle.com/javase/9/jshell/introduction-jshell.htm

中有很好的解释

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

,

试图涵盖基本概念:

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类中找不到主要方法,请将该主要方法定义为:
公共静态void main(String [] args)