我正在深入研究Java EE世界。即使在Java EE发布新规范之后,应用服务器显示器也宣布了新版本。我知道Application Server Lib中存在所有规范实现,并且编译的war文件不需要另外的jar。除此之外,在开发JAVA EE时,我们需要说依赖性的Web项目
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
</dependency>
当看到javaee-api-6.0.jar时,你可以意识到它只有957KB,换句话说它由类方法定义组成。
事实上,我已经在javaee-api-6.0.jar中反编译了一个类文件,这里是一个:我期望所有类文件都应该是接口和抽象。但事实并非如此。我想要理解的是编译器如何允许这样的Java类具有如下的方法定义:
public ActivationDataFlavor(Class paramClass, String paramString1, String paramString2);
已解压缩的类文件:
package javax.activation;
import java.awt.datatransfer.DataFlavor;
public class ActivationDataFlavor extends DataFlavor
{
private String mimeType;
private MimeType mimeObject;
private String humanPresentableName;
private Class representationClass;
public ActivationDataFlavor(Class paramClass, String paramString1, String paramString2);
public ActivationDataFlavor(Class paramClass, String paramString);
public ActivationDataFlavor(String paramString1, String paramString2);
public String getMimeType();
我的Java编译器给出了您所期望的所有错误。
我不认为java编译器不能正常工作,因为所有类文件只有1KB。
答案 0 :(得分:4)
这个jar只存在以适应编译依赖性,预计不会在jvm中运行。因此,所有字节码都被剥离,在这种情况下,反编译器无法正常工作。