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

我正在学习Kotlin,并希望了解编译后的代码是如何执行的,这与Java代码执行Android有什么不同。

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

谢谢!

与Android的Java代码执行有什么不同?

事实并非如此。 Android不执行Java代码或Kotlin代码。 相反,有以下链:

  1. 的Java /科特林/斯卡拉/等。 编译器使用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相同的字节码。

你可以在网上findKotlin教程。 但是,除了’它是jvm字节码’之外,他们从来没有解释过生成的字节码。 所以可以想象,Java编译的字节码没有太大的区别。

我可以想象,一个不同之处在于,Kotlin使用注释来扩充生成的字节码,以便启用Kotlin特定的语言function。 这也可能是Kotlin拥有自己的KClasstypes的原因。 它可能能够阅读kotlin特定类的注释。 实际上有两种types代表一个类(KClass和Class)。 老派的Class类实例是通过class.java引用的。

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

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