Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果编译一个空的java文件会发生什么?_Java - Fatal编程技术网

如果编译一个空的java文件会发生什么?

如果编译一个空的java文件会发生什么?,java,Java,当我编译一个空的Java文件时,它没有生成任何类文件。所以我想知道编译器在编译一个空的Java文件时是如何反应的?我认为在这种情况下它应该生成一个空的类文件,但它没有。那么为什么没有呢?如果文件完全是空的,只是调用了.java,那么当您试图生成类文件时,编译器就没有什么可做的了。如果你有 class Foo { } .java文件中的段,然后将生成一个空的calss文件(Foo.class)如果java文件可能是这样的: // Foo.java class Bar { } 它怎么知道这东西

当我编译一个空的Java文件时,它没有生成任何类文件。所以我想知道编译器在编译一个空的Java文件时是如何反应的?我认为在这种情况下它应该生成一个空的类文件,但它没有。那么为什么没有呢?

如果文件完全是空的,只是调用了.java,那么当您试图生成类文件时,编译器就没有什么可做的了。如果你有

class Foo {
}

.java文件中的段,然后将生成一个空的calss文件(Foo.class)

如果java文件可能是这样的:

// Foo.java 
class Bar
{
}
它怎么知道这东西叫什么?它还应该使其成为类、接口或枚举吗


与其为您做出选择,它什么也不做(我自己也会预料到一个错误……但没有什么是明智的选择)。

javac
启动,看到文件中没有声明类,然后完成。为了创建
.class
文件,您必须至少在文件中有类声明。

大多数答案实际上是,类文件不是编译的java文件,而是类的二进制表示形式


如果java文件包含两个类(尽管只有一个类是公共的),编译java文件可能会产生两个类文件这就是为什么编译零类的东西会导致零类文件。

Javac启动并检查文件大小,如果文件大小为零,则返回而不创建任何.class文件。

Javac为每个类声明(显式或匿名)创建一个类文件。
由于您的java文件不包含任何类文件,编译器只是没有生成任何类文件。

如果您声明了类(例如,
公共类测试{}
),它将编译并创建
测试.class
文件。它不会运行b'cos,因为它没有
main
方法。

类Emptyclass { }


//Emptyclass可以成功编译,也可以生成.class文件,但在执行过程中失败,因为JVM在类“Emptyclass”中找不到“Main Method”

Java不会创建该Java文件的类文件。因为首先它将查找类名。所以什么也不会发生

听起来你回答了自己的问题。如果你想知道为什么会这样,那是另一个问题。我想我也问了为什么。这就是为什么会这样,如果没有空的
.class
文件这样的东西。一个
.class
文件定义了一个类。这是什么样的问题?几乎是空的。java文件用于包注释,所以对空的源文件不做任何事情比将其视为错误更有意义。请看,虽然是真的,但执行失败不是问题,是吗:-)实际上可以创建(至少使用OpenJDK1.6)一个空文件并编译它,但是:1。它不会生成
.class
文件和2。它不会生成警告。那么它是否意味着成功编译而没有错误?是的,在我的例子中,它是成功编译而没有错误。您始终可以通过Bash下的
echo$?
读取上一个命令的退出状态。或者在Windows命令提示下,它是
echo%errorlevel%