【问题标题】:How to compile 2 classes individually in one file in java?如何在java中的一个文件中分别编译2个类?
【发布时间】:2021-07-25 23:18:15
【问题描述】:

我正在读一本书,它有一个示例,该示例在其文件中的不同类中有 2 个主要方法,一个主要方法用于测试目的,但如果有任何方法,我无法理解单独编译类的方法,请建议我 这是代码

/**
 * @author achintya
 */
public class StaticTest
{
    public static void main(String[] args)
    {
        Employee[] staff = new Employee[3];
        staff[0] = new Employee("tom",4000);
        staff[1] = new Employee("dick",60000);
        staff[2] = new Employee("harry",65000);

        for(Employee e : staff)
        {
            e.setId();
            System.out.println("name" + e.getName() + ",id=" + e.getId() + ",salary=" + e.getSalary());
        }
        int n = Employee.getNextId();
        System.out.println("next available id=" + n);
    }
}
class Employee
{
    private static int nextId = 1;
    private String name;
    private double salary;
    private int id;

    public Employee(String n,double s)
    {
        name = n;
        Salary = s;
        id = 0;
    }
    public String getName()
    {
        return name;
    }
    public double getSalary()
    {
        return salary;
    }
    public int getId()
    {
        return id;
    }
    public void setId()
    {
        id = nextId;
        nextId++;
    }
    public static int getNextId()
    {
        return nextId;
    }
    public static void main(String[] args){
        Employee e = new Employee("harry",50000);
        System.out.println(e.getName() + " " + e.getSalary());
    }
}

【问题讨论】:

    标签: java oop


    【解决方案1】:

    简短回答:您不能编译单个类。

    长答案

    您仍然可以单独运行这些课程。

    编译文件时,您不会看到任何更改。但是,java 会编译 2 个不同的类,StaticTest.class 文件中的 StaticTestEmployee.class 文件中的 Employee

    然后,要运行Employee.class,只要运行java EmployeeEmployee的main方法就会运行。阅读https://stackoverflow.com/a/27313798/13084867了解更多信息

    这里是 cmd 命令。它们可以在 Linux 环境中轻松复制:

    C:\...\Folder> javac StaticTest.java
    C:\...\Folder> java StaticTest
    

    【讨论】:

      【解决方案2】:

      在您的示例中,您在同一个源代码文件中有两个类。 这是完全公平的,因为只有 public 类需要进入它们自己的文件。这意味着您可以在同一个源代码文件中拥有 N 个非公共类。

      当事情被编译时,不再有“来自同一个 .java 文件”的概念。

      你最终得到了 StaticTest.class Employee.class。而且 JVM 只允许您在非公共类上调用 main() 方法。

      但是:根本没有编译单个类。 java编译器适用于“文件粒度”。它会总是编译你给它的整个文件,你没有办法说:编译那个文件,但只编译其中的非公共类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-28
        • 1970-01-01
        相关资源
        最近更新 更多