Kotlin编译器及反编译分析 | 热门编程语言-Kotlin(一)

一、Kotlin编译器

  可以运行Kotlin代码的IDE有IDEA,Android Studio和Eclipse,而且官方还提供了独立的编译器,方便我们在命令行编译执行(类似Java)
1.安装Kotlin的独立编译器(仅演示Linux环境下的步骤,其他系统的可以看文末提供的链接)
  安装SDKMAN

curl -s https://get.sdkman.io | bash

  使用SDKMAN来安装Kotlin编译器

sdk install kotlin

  使用以下步骤查看安装的Kotlin编译器主要包含什么指令。

which kotlin #寻找该指令的位置
#打印内容为:/root/.sdkman/candidates/kotlin/current/bin/kotlin
cd /root/.sdkman/candidates/kotlin/current/bin/ 
ls #查看所有操作指令

  所有指令显示如下:
在这里插入图片描述
  其中除了面向JVM的编译指令,还是面向JS的编译指令,下面我们主要演示kotlinc和kotlin两个指令的用法。
2.演示kotlinc和kotlin命令
(1) 写一段最简单的HelloKotlin代码 ,保存为HelloKotlin.kt文件。

fun main(args:Array<String>){
	println("Hello Kotlin")
}

(2) 使用kotlinc指令将HelloKotlin.kt编译成字节码文件

kotlinc HelloKotlin.kt

  执行完后,查看当前目录,可以看到生成的HelloKotlinKt.class字节码文件。
(3) 使用kotlin指令执行HelloKotlinKt.class

kotlin HelloKotlin

  可以看到屏幕打印出的“Hello Kotlin”,执行对这两个指令的作用已经很明显,其实使用过java编译和执行指令的同学就会发现其实这两个指令和javac和java很类似,功能也类似,这更证明可Kotlin和java的紧密联系。

二、Kotlin的反编译分析

  在第一部分中,后缀为.kt的文件经过kotlinc编译命令编译后生成了.class文件,该.class文件是用于在JVM上执行的字节码文件。
  但是字节码文件的要求是函数或方法不能脱离类,但是从我们写的HelloKotlin代码可以看出,我们并没有在.kt文件中写入任何关于类的代码,而仅仅包含main方法。所以我们可以猜想在执行kotlinc编译指令时,可能对我们的.kt文件做了转换,使之生成的字节码文件符合要求。接下来,让我们来验证我们的猜想
  我们可以使用javap这个反编译指令来反编译生成的字节码文件,看看该字节码反编译后的结果。

javap HelloKotlinKt.class 

  反编译后的结果如下所示:
在这里插入图片描述
  因为我们是采用Java的反编译指令来反编译该字节码文件,所以生成的也就是Java代码。结合上图,可以看出缩写的fun main()代码其实就是相当于HelloKotlinKt类中的main方法,所以在执行kotlinc是会自动生成类来包含.kt文件中的main方法,再将其编译成字节码文件。这样我们虽然没有自己动手在Kotlin中写出一个类包含方法或者函数,但是编译后的代码依然可以在JVM上运行。

三、简单将kotlin代码打包成jar包

1.将kotlin代码打包成jar包

kotlinc HelloKotlin.kt -include-runtime -d HelloKotlin.jar

  同样使用的还是编译指令kotlinc,但是后面多加了-include-runtime,但参数表示在打包成jar包时,将Kotlin本身的库也打包进去。
  对生成的HelloKotlin.jar进行解压缩可以看到jar中除了包含HelloKotlin编译后的字节码文件,还有一个文件夹包含了Kotlin的库的字节码文件。
2.执行jar包

java -jar HelloKotlin.jar

  可以看到屏幕打印出来的"Hello Kotlin"。

点击查看其它操作系统如何安装Kotlin编译器(有时候可能需要科学上网)

  • 关注我的公众号,跟着我一起学习Kotlin、Rust和TypeScript,获取更多的实战教程
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值