Tag: 编译器构造

如何在调试模式下编译? (netbeans,java,maven)

我正面临项目中的注释/持久性错误,并且持久性库会抛出一个 NullPointerException when trying to resolve the entities (org.eclipse.persistence.internal.jpa.metadata.accessors.classes.EntityAccessor.discoverMappedSuperclassesAndInheritanceParents(EntityAccessor.java:224)). 如何调试这些错误以找到有关错误原因的更多信息? 在EntityAccessor设置断点并编译以进行调试不起作用,编译器本身似乎没有在调试模式下运行。 我正在使用Netbeans / Java / Maven。

在编译器/机器级别执行什么操作?

我经常想知道在编译器或机器级别上做什么。 它与内存中的0和1有什么关系? 任何人都可以指出一些好的文献。

不同的JDK更新是否会生成不同的Java字节代码?

假设情景: 我有一个项目的源合规级别指定为1.5。 现在我用两个不同的JDK编译这个项目:首先使用JDK 6 Update 7,然后使用JDK 6 Update 20。 这两个不同的JDK是否会生成不同的Java字节代码,尽管它们的Update版本只有不同?

为什么在实例上调用方法时不需要导入类(Java)

让我迷惑的东西 – 一个例子: Thing.java: import java.util.Date; class Thing { static Date getDate() {return new Date();} } (相同的包)TestUsesThing.java: // not importing Date here. public class TestUsesThing { public static void main(String[] args) { System.out.println(Thing.getDate().getTime()); // okay // Date date = new Date(); // naturally this wouldn’t be okay } } 为什么没有必要导入Date才能在其中一个上调用getTime()?

如何从Java中的生产代码中删除调试语句

编译器是否可以从生产代码中删除用于调试目的的语句(例如日志记录)? 需要以某种方式标记调试语句,可能使用注释。 设置属性(debug = true)很容易并在每个调试语句中检查它,但这会降低性能。 如果编译器只是简单地使调试语句消失,那将是很好的。

javac根据赋值方法不同地处理静态final

当我编译: public static final boolean FOO = false; public static final void fooTest() { if (FOO) { System.out.println(“gg”); } } 我得到一个空方法fooTest() {} 。 但是当我编译时: static boolean isBar = false; public static final boolean BAR = isBar; public static final void fooTest() { if (BAR) { System.out.println(“gg”); } } if语句包含在已编译的类文件中。 这是否意味着java中有两种不同的“类型”静态final,或者这仅仅是编译器优化?

用java编写的C编译器

我想将ac语言编译器集成到java应用程序中以编译c源而无需创建文件(如Java Compiler Api)。 有没有完全用java编写的c编译器?

如何使用.jar库编译Java程序

我不能让javac识别外部.jar文件,我试图扩展其类。 我在同一目录中有两个文件:TestConsole.java和acm.jar。 我正在使用以下命令从同一目录编译: javac -classpath .:acm.jar TestConsole.java 但似乎javac只是忽略了acm.jar。 它给了我错误: TestConsole.java:1: package acm does not exist import acm.program; ^ 当然,acm.program是acm.jar中的一个包。 acm.jar中的所有类都已编译; 我只想在我的课程中使用它们,而不是编译它们。 我究竟做错了什么? 我在Mac上运行它,并且acm.jar的目录结构似乎是有效的:它包含一个acm/program目录,它有ConsoleProgram.class ,这是TestConsole扩展的唯一类。 javac -classpath “.:acm.jar” TestConsole.java也不起作用。

分布式Java编译器

是否有用于Java的分布式编译器,类似于C / C ++的distcc?

使用通配符将Javagenerics编译为C ++模板

我正在尝试构建Java到C ++的转换器(即Java代码进入,语义上“等效”(或多或少)C ++代码出来)。 不考虑垃圾收集,这些语言非常熟悉,因此整个过程已经很好用了。 然而,一个问题是C ++中不存在的generics。 当然,最简单的方法是执行java编译器所做的擦除。 但是,生成的C ++代码应该很好处理,所以如果我不丢失generics类型信息会很好,即如果C ++代码仍然可以使用List而不是List ,那将会很好。 否则,C ++代码需要在使用此类generics的任何地方进行显式转换。 这很容易出错并且不方便。 所以,我试图找到一种方法来以某种方式获得更好的generics表示。 当然,模板似乎是一个很好的候选人。 虽然它们是完全不同的(元编程与仅编译时类型增强),但它们仍然有用。 只要不使用通配符,只需将通用类编译为模板即可。 然而,只要通配符发挥作用,事情就会变得非常混乱。 例如,考虑以下列表的java构造函数: class List{ List(Collection c){ this.addAll(c); } } //Usage Collection c = …; List l = new List(c); 怎么编译呢? 我有想法在模板之间使用电锯重新解释。 然后,上面的例子可以这样编译: template class List{ List(Collection c){ this.addAll(c); } } //Usage Collection c = …; List l […]