0

我创建了一个名为 Box 的类,它有实例变量和其他类名 Boxdemo,我在其中使用 main()..这里提出了我的疑问..当我通过 javac 执行时,我像javac Boxdemo.java一样执行,它显示了两个类文件BoxBoxdemo ..为什么它创建两个类文件而不使用 Box 类中的 main 函数。是否可以运行两个类文件,因为我执行javac * Box.java *它显示错误javac:file not found

class Box {
    double width;
    double height;
    double depth;

    void volume() {
        System.out.print("volume is");
        System.out.println(width * height * depth);
    }
}

class Boxdemo
{
    public static void main(String args[]) {
        Box mybox1 = new Box();
        Box mybox2 = new Box();
        mybox1.width = 10;
        mybox1.height = 20;
        mybox1.depth = 15;
        mybox2.width = 13;
        mybox2.height = 25;
        mybox2.depth = 17;
        mybox1.volume();
        mybox2.volume();
    }
}
4

4 回答 4

0

您应该有两个单独的源文件,每个源文件只包含一个类。

然后你用 javac 编译主类,它会自动编译所有需要的类。

最后,执行包含 main 方法的类。

这是您应该拥有的,我冒昧地在此过程中改进了您的代码:

盒子.java

public class Box
{
    public double width; // You should use private attributes, a constructor, getters and setters.
    public double height;
    public double depth;

    public void volume()
    {
        System.out.println("volume is " + width*height*depth);
    }

Boxdemo.java

public class Boxdemo
{
    public static void main(String args[])
    {
        Box mybox1=new Box();
        Box mybox2=new Box();
        mybox1.width=10;
        mybox1.height=20;
        mybox1.depth=15;
        mybox2.width=13;
        mybox2.height=25;
        mybox2.depth=17;
        mybox1.volume();
        mybox2.volume();
    }
}
于 2013-05-29T09:07:31.137 回答
0

编译将为文件中包含的每个类创建一个 .class 文件:一个用于 Box,另一个用于 BoxDemo。无论如何,必须是具有 main 方法public的那个,并且文件的名称应该是带有 .java 扩展名的此类名称(在您的情况下是 Boxdemo.java)。然后你就可以编译这个文件了。

于 2013-05-29T09:07:41.510 回答
0

两件事情:

Java 中的所有类都必须编译成单独的文件。因此,当您使用 javac 时,创建了两个文件,而不是一个 - 正如您所预料的那样。那是因为Boxdemo是您的驱动程序类 - 它调用并实例化该类的方法Box

其次,当您使用 javac 编译程序时,它会.class为每个 Java 类创建一个文件。因此,在您的情况下,您正确地看到了两个.class文件 - 这将是:Box.classBoxdemo.class.

并且,要运行到已编译的 java 程序,您调用java已编译的程序(不使用类扩展)。那是:

java Boxdemo

.class再次注意,执行的命令中没有扩展名。

当然,如果您使用的是 IDE,则整个过程都会为您处理好——并且可能涉及 Makefile 等。但是,这通常是在后台发生的。

于 2013-05-29T09:11:24.387 回答
0

在使用 javac 编译器编译时,将为包中的每个类创建 .class 文件....尽管您已经编译了 Boxdemo.java ...它隐式使用 Box 类,因此两者都将被编译并生成 .class 文件

于 2013-05-29T09:09:40.590 回答