Java动态性澄清

Java动态性澄清,java,dynamic,jvm,Java,Dynamic,Jvm,在阅读一本关于Java的书时,我无意中发现了这篇摘录,它被称为“Java流行语” 动态 Java程序携带大量的运行时类型信息,用于在运行时验证和解析对对象的访问。这使得以安全和方便的方式动态链接代码成为可能。这对于Java环境的健壮性至关重要,在Java环境中,字节码的小片段可以在运行的系统上动态更新 我的问题是: “运行时类型信息”一词是什么意思?如果能提供一个例子,我将不胜感激 “字节码的小片段可以在运行的系统上动态更新。”据我的理解,当我们使用javac命令时,Java代码被转换成字节码,

在阅读一本关于Java的书时,我无意中发现了这篇摘录,它被称为“Java流行语”

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

我的问题是:

  • “运行时类型信息”一词是什么意思?如果能提供一个例子,我将不胜感激
  • “字节码的小片段可以在运行的系统上动态更新。”据我的理解,当我们使用
    javac
    命令时,Java代码被转换成字节码,并通过
    Java
    命令执行。那么,为什么/如何在运行的系统上更新字节码片段呢
  • JVM和在JVM上运行的Java程序可以获得对象的实际类型。在Java中,如果一个对象实际上没有给定的类型,就不可能假装它有给定的类型。JVM将检查并检测这一点,并抛出异常

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

  • 变量的
    编译时类型
    是它声明为的类型,而
    运行时类型
    是变量指向的实际对象的类型。假设我们有以下几点:

    Object obj=新整数(1)

    o
    编译时类型为
    对象
    ,而其运行时类型为
    整数

  • “字节码的小片段可以在运行的系统上动态更新。”

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


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

  • 可能是最流行的字节码操作框架

  • 例如类/对象的自动填充和实时编译?