【问题标题】:Running Programs outside of Main on Java在 Java 上运行 Main 之外的程序
【发布时间】:2020-02-03 18:35:53
【问题描述】:

我是一名刚开始学习 Java 的 CS 新学生,目前我正在使用 IntelliJ 作为我的 IDE。目前,我们没有讨论任何疯狂复杂的程序,只是课堂上的基本项目。我的问题是,当我去创建我的项目时,我别无选择,只能通过 Main 类运行它,即使说明希望类名是特定的。此外,每当我尝试创建新类或运行已下载的 java 文件时,它仍会继续运行 Main 类,即使我已关闭 Main。我有我在 VS Code 中创建的文件(我知道这不是最好的选择,这就是我切换到 IntelliJ 的原因),除非我创建一个全新的项目,否则我无法运行它们,复制并粘贴将代码写入 Main 文件,并将类名更改为 Main。

我不确定这是否是 Java、IntelliJ 内部的东西,或者只是我还不了解一切是如何工作的,但我希望有人能帮助我解决这个问题。

这是一个例子。在 src 文件夹中,我有 package 文件夹,其中包含 Main java 文件以及我正在尝试运行的单独文件。 Main 也是空的。

package com.ethan;

import java.util.Scanner;


public class Exercise02_19 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        //Enter 3 points
        System.out.println("Enter the 3 points for a triangle: ");

        //Point A
        double x1 = input.nextDouble();
        double y1 = input.nextDouble();

        //Point B
        double x2 = input.nextDouble();
        double y2 = input.nextDouble();

        //Point C
        double x3 = input.nextDouble();
        double y3 = input.nextDouble();


        //Find the sides and area

        double side1 = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
        double side2 = Math.sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
        double side3 = Math.sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));

        double s = (side1 + side2 + side3)/2;
        double area = Math.sqrt(s * (s - side1) * (s - side2) * (s - side3));

        System.out.println("The area of the triangle is: " + area);

    }
}

谢谢。

【问题讨论】:

  • 显示您尝试运行的代码,包括您项目中的 Main 和其他类。
  • 我附上了一张照片。谢谢。
  • 插入代码并将其标记为代码。我们不能将图片复制到 IDE 中。您在主类中还有另一个主要方法......?如果是,请删除它。
  • 完成。在源文件夹中,我有我的包文件夹,其中有 Main.java 和 Exercise02_19.java。我不确定你是不是这个意思。

标签: java main


【解决方案1】:

在编辑器或 IDEA 上打开文件并不意味着它们已关闭或打开以供运行。它们只是对修改开放。

为了运行 Java 程序,您需要一个 main 方法(除非您使用的框架在这​​种情况下对您隐藏)。一切都通过 main 运行,所以如果你想使用自定义类,你必须通过 main 调用它。

main 方法如下所示

public static void main(String[] args){
     // your code
}

您可以通过使用 IDEA、设置 JDK 或使用 javac 编译它然后使用 java 命令运行 .class 文件来运行程序。有很多关于如何通过 CLI 运行程序的文章。我建议首先使用 CLI,以便了解 JVM 在幕后发生了什么。

【讨论】:

  • 这是我的一个练习的开始。这个类和 Main 类在同一个文件位置。 public class Exercise02_19 { public static void main(String[] args) { //所有代码 }
  • 没有Main class,Java 应用程序的唯一要求是main method。所以你的班级可以随心所欲地命名。
  • 有没有办法可以将“Exercise02_19”类设置为主类?我上交的代码必须与我拥有的代码完全相同,但是当我运行它时,即使我关闭了它,它也只会运行 Main.java 文件。
【解决方案2】:

它不依赖于类名,而是依赖于作为代码执行入口点的 main 方法。

这个方法必须在一个类中定义并且看起来完全像这样:

public static void main(String[] args){
// code goes here
}

确保此方法在您的应用程序中仅存在一次。

要在 IntelliJ 中快速创建此方法,请键入 psvm,然后按 Tab。

你用来调用 JVM 的类的名字决定了当你定义多个 main 方法时调用哪个 main 方法。

【讨论】:

  • 这是我的一个文件的一部分的示例。我在同一个位置有这个文件和空的主文件。导入 java.util.Scanner;公共类Exercise02_19 { public static void main(String[] args) { Scanner input = new Scanner(System.in); //输入 3 个点 System.out.println("输入三角形的 3 个点:"); //点A double x1 = input.nextDouble();双 y1 = input.nextDouble(); } }
  • @efan 通过编辑将附加信息作为问题的一部分发布,而不是在 cmets 中。
【解决方案3】:

@efan - Alexis Pavlidis 是正确的。

详细说明:

  1. 在 Java 中,每个“程序”都包含一个或多个“classes”。在您的示例中,该类恰好被称为Exercise02_19

  2. 每个程序都必须“从某个地方开始”。这称为entry point

  3. 在 Java 中,入口点是 method,签名为 public static void main(String[] args)

  4. 在 Java 中,许多其他语言不同,每个类都可能有自己的main()。您必须在运行时选择 which 入口点。使用您的 IDE,或使用命令行参数。

    在您的情况下,您选择Exercise02_19 类中的main() 方法。

  5. 正如亚历克西斯·帕夫利迪斯所说:

    没有 Main 类,Java 应用程序的唯一要求是 一种主要方法。所以你的班级可以随心所欲地命名。

【讨论】:

    【解决方案4】:

    Java 程序将始终main() 方法启动。你可以把它想象成你的切入点。

    如果你想创建单独的类,你必须从你的 main 方法中调用它们。这是一个例子:

    Main.java

    public class Main {
    
        public static void main(String[] args) {
            MyTestClass myInstanceOfIt = new MyTestClass();
            myInstanceOfIt.doSomething();
        }
    }
    

    MyTestClass.java

    public class MyTestClass {
    
        public void doSomething() {
            //do something here
        }
    }
    

    【讨论】:

    • 它并不总是从 Main 类开始,而是在 main 方法中。您可以在任何类中声明 main 方法。
    • @Tiberiu 可能是因为您将班级命名为Main,所以它看起来不像是错字,而且事实上它仍然是错误的。您确实不需要需要从 main 方法调用类来使用它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2021-07-01
    • 1970-01-01
    相关资源
    最近更新 更多