Kotlin是什么

Kotlin是一种Java系编程语言。
Java系编程语言
指经过编译生成字节码(Java byte code), 从而可在JVM上运行的语言,也可以称之为Java平台语言。

注意:Android 中的虚拟机并不是 JVM,而是Dalvik/ART,需要用字节码(Java byte code)进行再一次转换成相对应的Dalvik字节码。

java平台无关性

java语言:“一次编写,到处运行(Write Once,Run AnyWhere)“。
而实现了这种可以“到处运行”的根本原因就在于——虚拟机。Sun公司以及其他虚拟机提供商提供了很多可以运行在各种不同平台上的虚拟机,而这些虚拟机都可以载入和执行同一种存储格式的文件——字节码(ByteCode)。这便是 Java 语言能够与平台无关的根本原因。

Kotlin理解 - 图1

虚拟机的语言无关性

可能很多程序员都认为 Java 虚拟机就是用来执行 Java 程序的,但其实不然,虚拟机除了提供了平台无关性这种能力之外,还具备了与语言无关的特性。 目前已经出现了很多种可以运行在 Java 虚拟机上的语言了,如 Kotlin、Groovy、Scala、Clojure、JRuby、Jython 等。实现这种语言无关性的基础仍然是虚拟机和字节码存储格式。
Java 虚拟机不与包括 Java 在内的任何一种语言绑定,它只与 “Class文件” 这种特定的二进制文件格式相关联。

**Kotlin理解 - 图2

理解了虚拟机的语言无关性之后,我们就可以知道了,Kotlin为什么能够和java兼容了,为什么我们可以在android工程中,同时使用java语言和Kotlin语言了,因为最终都是变异成*.class文件,交给虚拟机来执行。

kotlin语言.png
Java虚拟机与平台无关性 - Helldorado - 博客园

KClass和Class

Kotlin是完全兼容java的,同时Kotlin是jvm语言,Kotlin编译之后,会翻译成和java一样的字节码
kotlin语言.png

  • 在Java语言中,字节码对应的类是Class
  • 在Kotlin语言中,字节码对应的类是KClass

在虚拟机中只存在一个class文件,他可以封装成Class对象,也可以封装成KClass对象,
可以这样理解,KClass和Class是字节码的一体两面,
这也就解释了为什么一个类或者对象,我们可以同时获取KClass,也可以获取Class了