Kotlin編譯器使用及反編譯分析

在上一次對Kotlin進行了一個入門的介紹,並用IntelliJ IDEA來編寫了一個Kotlin的HelloWorld,記得咱們在最初學習J2SE的時候在編譯運行都是經過javac、java命令來進行的,脫離開了IDE,這樣從學習角度來講會更加的紮實,因此我們也來經過手動編譯運行的方式來學習Kotlin,也就是經過終端命令行的方式,如官網所示:java

要想使用它,則須要下載相關的工具包,下載以下:jvm

下載完成以後,將其解壓縮,其結構以下:函數

其中簡單瞅下里面的文件:工具

因此,先將其配置到咱們的path中,以下:學習

至此命令行環境已經搭建好了,接下來則手動新建一個Kotlin的文件:字體

而後保存並用kotlinc來編譯一下:spa

這裏有個小細節跟Java不同,就是生成的字節碼文件會在後面自動帶上一個Kt的後綴,以下:命令行

接下來運行:3d

第一個經過手動編譯運行的Kotlin的程序就已經完成了,回到程序上來思考一個問題:對象

很明顯的一個區別就是貌似這個main()方法沒有在class當中,這個在Java中是不可能存在的狀況, 而對於Kotlin是運行在JVM之上的程序,而根據JVM的規範方法是不可能脫離類而單獨存在的,因此其實咱們也能猜到Kotlin在編譯時確定是對源文件自動給加上了類使之符合JVM的要求,下面來揭密一下,使用javap【這個在以前學習jvm字段碼時已經大量用過了】這個命令來查看一下生成的字節碼的結果是長啥樣,以下:

很明顯看到的字體碼就是一個標準的java程序,一切神祕面紗就已經揭曉了,其實也就是Kotlin在編譯最終仍是會編譯成Java字節碼的,經過這個簡單的例子就能比較好的提示Java和Kotlin的關聯關係,接下來咱們能夠進一步來經過javap查看字節碼的更多信息,以下:

打成Jar包運行: 

對於Kotlin的文件也能夠像Java同樣打成jar包來運行,下面來演示一下:

其中咱們將這個jar文件解壓縮看一下里面的文件,能夠看到對於Kotlin中運行時的一些字節都被一塊兒打進到jar當中了,以下:

接下來則執行該jar,以下:

經過這個小實驗能夠很清楚的感覺到:Kotlin和Java是能夠互操做的嘛,Kolin編寫的代碼打成jar包,最終能夠用Java命令來執行。

下面則再加到咱們的IDE,來正式學習Kotlin的基礎語法:

其中能夠看到main函數中的參數定義風格跟Java是相反的,變量名在前,而類型名在後,函數用fun關鍵字來聲明,反正記住這個語法既可,沒啥可說的。

接下來我們來定義一個兩數相加的函數:

其中還有一個小細節,全部的變量都是對象類型,也就是:

而不能寫成像Java那樣的基本類型,如:

接下來我們來調用一下:

相關文章
相關標籤/搜索