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

Kotlin代码是如何在Android应用程序中执行的,它与Java有何不同?,java,android,kotlin,Java,Android,Kotlin,我正在学习Kotlin,希望了解编译后的代码是如何执行的,以及它与Android的Java代码执行有何不同 我还想知道为什么我们要编写MainActivity::class.java(class.java)来引用类文件 谢谢大家! 基本上Kotlin被编译成与Java相同的字节码 你可以在网上找到Kotlin教程。但除了“这是jvm字节码”之外,他们从来没有对生成的字节码进行过太多的解释。所以我们可以想象,Java编译的字节码并没有太大的区别 我可以想象,一个不同之处是Kotlin使用注释来扩充

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

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


谢谢大家!

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

你可以在网上找到Kotlin教程。但除了“这是jvm字节码”之外,他们从来没有对生成的字节码进行过太多的解释。所以我们可以想象,Java编译的字节码并没有太大的区别

我可以想象,一个不同之处是Kotlin使用注释来扩充生成的字节码,从而启用Kotlin特定的语言特性。这可能也是Kotlin拥有自己的KClass类型的原因。它可能能够读取特定于kotlin的类注释。实际上,有两种类型表示一个类(KClass和class)。旧的学校类类型实例是通过Class.java引用的

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

教程的良好起点是

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

事实并非如此。Android不执行Java代码或Kotlin代码。取而代之的是以下链条:

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

  • Android Gradle插件获取JVM字节码,将其转换为Dalvik字节码(使用
    dx
    程序),并将其打包成
    .apk

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

  • 执行的是机器代码(和/或Dalvik字节码)。ART不知道第1步的源代码是哪种语言,也不在乎

  • 我还想知道为什么我们要编写MainActivity::class.java(class.java)来引用类文件


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

    由于缺乏先前的研究而被否决。