Java动态说明



我在读一本我不懂的Java书时,看到了这段摘录,标题为Java Buzzwords

动态

Java程序携带大量的运行时类型信息,这些信息用于在运行时验证和解析对对象的访问。这使得以安全和方便的方式动态链接代码成为可能。这对于Java环境的健壮性至关重要,在Java环境中,字节码的小片段可以在运行的系统上动态更新。

我的问题是:

  1. 单词"运行时类型信息"是什么意思?如果能提供一个例子,我将不胜感激
  2. "字节码的小片段可能会在运行的系统上动态更新。"根据我的理解,当我们使用javac命令时,Java代码会转换为字节码,并使用java命令执行。那么,为什么/如何在运行的系统上更新字节码片段呢
  1. 变量的compile-time type是它被声明为的类型,而runtime type是变量所指向的实际对象的类型

    对象obj=新整数(1)

    ocompile-time类型为Object,而其运行时类型将为Integer

  2. "字节码的小片段可以在运行的系统上动态更新。"

    这基本上意味着,在调试一些java程序时,您可以对程序进行一些更改和重新编译,然后再次运行它,而无需重新启动JVM。

  1. JVM和在JVM上运行的Java程序可以获得对象的实际类型。在Java中,如果对象实际上没有给定的类型,就不可能假装它有给定的类型。JVM将对此进行检查和检测,并抛出异常。

  2. 在调试某些正在运行的代码时,即使是远程调试,也可以修改正在运行的源代码,对其进行编译,并告诉JVM重新加载字节码,而无需停止和重新启动程序。JavaEE容器和许多框架也在运行时生成字节码,并将其加载到正在运行的JVM中。

除了其他人已经说过的之外,还有一些2)的进一步信息来源:

  1. Eclipselink关于编织使用的页面
  2. ASM可能是最流行的字节码操作框架

最新更新