我正在学习Kotlin并想了解编译代码的执行方式,以及它与Android代码执行的不同之处。
我也想知道为什么我们写MainActivity::class.java
(class.java
)来引用类文件。
谢谢!
答案 0 :(得分:4)
与Android的Java代码执行有何不同
不是。 Android不会执行Java代码或Kotlin代码。相反,有以下链:
的Java /科特林/斯卡拉/等。编译器使用Java / Kotlin / Scala代码并在.class
文件中发出JVM字节码。
Android Gradle插件接受JVM字节码,将其转换为Dalvik字节码(使用dx
程序)并将其打包到.apk
。
在设备上安装.apk
文件时,ART会将其包含的Dalvik字节码转换为机器代码。
执行的机器代码(和/或Dalvik字节码)。 ART不知道步骤1中的语言源代码是什么,并且不关心。
我也想知道为什么我们编写MainActivity :: class.java(class.java)来引用类文件。
你不是。您编写它以引用与Class
类对应的MainActivity
对象。
答案 1 :(得分:1)
基本上Kotlin被编译为与Java相同的字节代码。
您可以在网络上找到Kotlin教程。但他们从未解释过生成的字节码,而不是'它是jvm字节码'。因此可以想象,Java编译的字节码没有太大区别。
我可以想象,一个区别是Kotlin使用注释扩充生成的字节码,以便启用Kotlin特定的语言功能。这也可能是Kotlin拥有自己的KClass类型的原因。它可能能够读取kotlin特定的类注释。实际上,有两种类型代表一个类(KClass和Class)。旧式的Class类型实例是通过class.java引用的。
另请注意,Kotlin可以编译为除JVM字节码之外的其他语言。在其他情况下,将没有Class引用,但仍然是KClass引用。
教程的一个很好的起点是https://kotlinlang.org