我正在开发一个基于 Swing 的应用程序,并对源代码进行了更改。我本以为更改后的代码会被 JVM 重新编译,但这并没有发生,应该有吗?
从 webapps 背景来看,当更改 java 源文件时,JVM 会识别更改并在 Tomcat 容器内重新编译,因此我不需要通过类路径重新加载(通过重新启动 Tomcat 服务器)。如果变化很大,那么这并不总是有效。
最佳答案
I made a change to to the source. I would have thought that the changed code be recompiled by the JVM but this did not occur. Should it have ?
没有。假设您使用标准 Java 工具链,则仅在运行 javac
时才编译源代码。当然,JVM(即java
)既不会编译源代码,也不会注意到源代码何时发生更改。事实上,它甚至不会注意到“.class”文件是否已更改1。
另一方面,如果您使用 IDE 来开发/编译/运行,那么它(而不是 JVM)通常会注意到源代码何时更改并自动重新编译它。但是,如果您碰巧在更改应用程序的同时运行,则更改通常不会影响正在运行的程序2。
1 - 可以对您的应用程序进行编码,以便它注意到更改并尝试重新加载重新编译的类,但这样做会出现很多问题和潜在的陷阱。 (多次加载一个类每次都会给你一个不同的类型......就运行时类型系统而言。除非你可以重新加载整个应用程序,否则它会变得非常尴尬。)
2 - 某些 IDE(例如 Eclipse)会注意到您对正在调试的类正在使用的类进行更改,并为您提供重新启动该类的选择正在调试应用程序。
关于java - swing应用程序支持动态代码编译吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35412823/