kotlin語言學習02 ——kotlin編譯器的使用和java反編譯分析

探索kotlin與Java之間的關(guān)系涉枫,Java和kotlin之間互操作邢滑,kotlin為什么可以在jvm上面運行。

一拜银、下載Kotlin編譯器殊鞭,并配置環(huán)境變量

1、下載安裝尼桶、

進入kotlin編譯器官方地址進行下載安裝,或者到github上面下載锯仪,我這里最新的發(fā)行版本是1.3.61泵督。

kotlin編譯器官方地址

2、配置環(huán)境變量

我的下載地址是Downloads 庶喜,習慣把下載的內(nèi)容放到資源文件下小腊,即Libraey下面。 配置如下久窟。
移動文件并解壓

mv ~/Downloads/kotlin-compiler-1.3.61.zip ~/Library/
tar -zxvf kotlin-compiler-1.3.61.zi

添加環(huán)境變量

export PATH="~/Library/kotlinc/bin":$PATH

檢查是否設(shè)置成功秩冈,可以使用which命令

which kotlin
which kotlinc

設(shè)置完成后如下圖所示:


設(shè)置環(huán)境變量完成

二、在控制臺下創(chuàng)建kotlin斥扛,使用編譯器進行編譯并執(zhí)行

1入问、創(chuàng)建kotlin文件

mkdir hello
cd hello
subl HelloKotlin.kt
# 編寫kotlin代碼后保存

在這里插入圖片描述

注意: 我這里使用的是sublime text對編寫kotlin文件,可以看我之前的教程稀颁,怎么將sublime text集成到命令行中芬失。點擊這里

2、使用 kotlinc 對代碼進行編譯

kotlinc HelloKotlin.kt
在這里插入圖片描述

我們可以看到匾灶,生成了META-INF和HelloKotlinKt.class棱烂,其中META-INF是一些描述信息。真正生成的是HelloKotlinKt阶女。clss颊糜,在源文件后面增加了Kt后綴哩治。

3、使用kotlin執(zhí)行

kotlin HelloKotlinKt
kotlin運行代碼

三衬鱼、javap反編譯分析

通過上面的例子我們發(fā)現(xiàn)业筏,kotlin代碼最終編譯成了.class文件,在JVM上面執(zhí)行馁启,但是kotlin代碼并沒有Java類的定義驾孔。對于java而言他不認識你是什么語言,只認識字節(jié)碼惯疙,要求程序不能脫離函數(shù)和類的概念而存在翠勉,那么它是如果做到的呢?我們使用 javap反編譯工具進行分析霉颠。

1对碌、使用javap分析 kotlin生成的 class文件結(jié)構(gòu)。

javap HelloKotlinKt.class

得到:

Compiled from "HelloKotlin.kt"
public final class HelloKotlinKt {
  public static final void main(java.lang.String[]);
}

我們可以看到蒿偎,字節(jié)碼的結(jié)構(gòu)中完全沒有kotlin的內(nèi)容朽们,而是java的內(nèi)容,Java普通的代碼內(nèi)容诉位。
由此我們可以知道通過kotlin編寫的代碼不在任何一個類中骑脱,Kotlinc編譯時候?qū)⒋a放到符合Java規(guī)范的類中。

2苍糠、反編譯所有字節(jié)碼內(nèi)容分析

javap -c HelloKotlinKt.class

如下:

Compiled from "HelloKotlin.kt"
public final class HelloKotlinKt {
  public static final void main(java.lang.String[]);
    Code:
       0: aload_0
       1: ldc           #9                  // String args
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull:(Ljava/lang/Object;Ljava/lang/String;)V
       6: ldc           #17                 // String hello world Kotlin
       8: astore_1
       9: iconst_0
      10: istore_2
      11: getstatic     #23                 // Field java/lang/System.out:Ljava/io/PrintStream;
      14: aload_1
      15: invokevirtual #29                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      18: return
}

以上代碼可以看到叁丧,kotlin中的 println() 相當于Java中的 System.out.println()

四岳瞭、Kotlin打成jar包拥娄,通過java來執(zhí)行

1、將kotlin代碼打包成jar

# -include-runtime 引入運行時需要的環(huán)境
kotlinc HelloKotlin.kt -include-runtime -d HelloKotlin.jar

2瞳筏、使用Java命令執(zhí)行

java -jar HelloKotlin.jar

3稚瘾、解壓jar文件
可以看到里面多了一個kotlin目錄

在這里插入圖片描述

打開發(fā)現(xiàn)里面是kotlin的包
在這里插入圖片描述

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市姚炕,隨后出現(xiàn)的幾起案子摊欠,更是在濱河造成了極大的恐慌,老刑警劉巖钻心,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凄硼,死亡現(xiàn)場離奇詭異,居然都是意外死亡捷沸,警方通過查閱死者的電腦和手機摊沉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痒给,“玉大人说墨,你說我怎么就攤上這事骏全。” “怎么了尼斧?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵姜贡,是天一觀的道長。 經(jīng)常有香客問我棺棵,道長楼咳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任烛恤,我火速辦了婚禮母怜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缚柏。我一直安慰自己苹熏,他們只是感情好,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布币喧。 她就那樣靜靜地躺著轨域,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杀餐。 梳的紋絲不亂的頭發(fā)上干发,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音史翘,去河邊找鬼铐然。 笑死,一個胖子當著我的面吹牛恶座,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沥阳,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼跨琳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桐罕?” 一聲冷哼從身側(cè)響起脉让,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎功炮,沒想到半個月后溅潜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡薪伏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年滚澜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫁怀。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡设捐,死狀恐怖借浊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萝招,我是刑警寧澤蚂斤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站槐沼,受9級特大地震影響曙蒸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜岗钩,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一纽窟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凹嘲,春花似錦师倔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凶朗,卻和暖如春瓷胧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棚愤。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工搓萧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宛畦。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓瘸洛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親次和。 傳聞我的和親對象是個殘疾皇子反肋,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359