kotlin学习2 kotlin的编译与反编译以及与java的关系

这篇文章主要描述 kotlin 的简单编译与反编译的流程。以及与 java 的关系。
之前说到 kotlin 是一个静态的代码语言。他也是需要编译的。需要编译就有编译器;而他和java又是可以相互调用的。所以隐隐约约感觉应该编译出来的东西和应该也和java 相关;下面就来看一下。

下载安装编译器

方式在官网上都有;我这里选择的是下载压缩包;你通过sdkmanhomebrew等安装当然都是 ok 的。官网链接 点我大帅比

下载完之后,解压,配置好路径;如下:
image_1bsd0v6gh19mv4sf1bqqg3r11onm.png-50.1kB
退出;source 一下你的bashrc或者zshrc 文件;而后验证一下
image_1bsd10p1o1c7r1u3r1nfot7bjp13.png-24.7kB

如此一来,你的编译器就安装好了。下面就是测试。

编译与运行kotlin文件

首先;vim 编写一个简单的 hello world 文件 HelloKotlin.kt

1
2
3
fun main(args:Array<String>) {
println("Hello World")
}

第二:编译与运行;
java 类似;kotlinc HelloKotlin.kt 编译; 运行 kotlin HelloKotlinKt 执行;如下图。
image_1bsd1do35ukb1rkq2ig1405gns1g.png-28.6kB

这里需要注意的是;编译的时候产生的文件如下:
image_1bsd1fvvejdba7u9k18p31dd22d.png-31kB
一个 class 文件;以及一个配置文件的文件夹。
这个 class 文件就是我们执行的文件;而编译器在文件末尾加上了 Kt 两个字母用于标记这个Kotlin 的编译文件。

反编译 class 文件

既然是 class 文件;可以和java相互执行;javap 反编译一下看看 class 文件的结构。因为kotlin 文件中;我们是没有指定类的;那在class 文件中,一定是会生成类的;否则就和 java 的基本逻辑产生了冲突。我们看一下:
image_1bsd1opuf1l6s1eoj5971t1p1kls3q.png-35.2kB

可以反编译的更加彻底一点看下方法内部实现;命令是 javap -c
image_1bsd1rjub1docjujtrk8ee1ur047.png-109.6kB
可以看到;调用的都是 java 内部的方法。

打包成jar

既然是在 jvm 上运行;一定是可以打成 jar 来执行的;kotlinc 提供了支持。

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

-include-runtime 是将 kotlin 运行时所需要的包都包含进去的参数。

而后就可以用 java -jar 来执行。得到一样的结果
image_1bsd239gj1t1911rq1lcnv4l10684k.png-23.2kB

总结:

以上说了如何编译和反编译kotlin 以及如何打成 jar 包运行。当然了一般情况下我们用不到这么麻烦,intellij 提供了很好的支持,但这有助于帮助我们理解 kotlinjava 的关系。也有注意我们更好的学习 kotlin

朱老师&敏哥 wechat
有惊喜,朋友🙄
我要拿铁不加糖.