Kotlin 代码如何在 Android 应用程序中执行,它与 Java 有何不同



我正在学习 Kotlin,想了解编译后的代码是如何执行的,以及它与使用 Android 执行 Java 代码有何不同。

我还想知道为什么我们写MainActivity::class.javaclass.java)到引用类文件。

谢谢!

它与使用Android执行Java代码有何不同

其实不然。Android 不执行 Java 代码或 Kotlin 代码。取而代之的是以下链:

  1. Java/Kotlin/Scala/etc.编译器采用Java/Kotlin/Scala代码,并在.class文件中发出JVM字节码。

  2. Android Gradle插件采用JVM字节码,将其转换为Dalvik字节码(使用dx程序)并将其打包到.apk中。

  3. .apk文件安装在设备上时,ART将其包含的Dalvik字节码转换为机器码。

  4. 执行的是机器代码(和/或 Dalvik 字节码)。ART不知道在步骤1中是哪种语言的源代码,也不关心。

我还想知道为什么我们将 MainActivity::class.java(class.java) 编写到引用类文件中。

你没有。编写它以引用与MainActivity类对应的Class对象。

基本上 Kotlin 被编译为与 Java 相同的字节码。

您可以在网络上找到 Kotlin 教程。但是他们从来没有解释太多关于生成的字节码,除了"它是jvm字节码"。所以人们会认为Java编译的字节码没有太大区别。

我可以想象一个区别是 Kotlin 用注释来增强生成的字节码,以便启用 Kotlin 特定的语言功能。这可能也是 Kotlin 拥有自己的 KClass 类型的原因。它可能能够读取 kotlin 特定的类注释。实际上,有 2 种类型表示一个类(KClass 和 Class)。老式类类型实例通过类.java引用。

另请注意,Kotlin 可以编译为 JVM 字节码以外的其他语言。在其他情况下,将没有类引用,但仍是 KClass 引用。

教程的一个很好的起点是 https://kotlinlang.org

相关内容