在上一次对Kotlin进行了一个入门的介绍,并用IntelliJ IDEA来编写了一个Kotlin的HelloWorld,记得我们在最初学习J2SE的时候在编译运行都是通过javac、java命令来进行的,脱离开了IDE,这样从学习角度来说会更加的扎实,所以咱们也来通过手动编译运行的方式来学习Kotlin,也就是通过终端命令行的方式,如官网所示:

要想使用它,则需要下载相关的工具包,下载如下:

下载完成之后,将其解压缩,其结构如下:

其中简单瞅下里面的文件:

所以,先将其配置到我们的path中,如下:

至此命令行环境已经搭建好了,接下来则手动新建一个Kotlin的文件:

然后保存并用kotlinc来编译一下:

这里有个小细节跟Java不一样,就是生成的字节码文件会在后面自动带上一个Kt的后缀,如下:

接下来运行:

第一个通过手动编译运行的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那样的基本类型,如:

接下来咱们来调用一下:

Kotlin编译器使用及反编译分析的更多相关文章

  1. Android开发学习之路--逆向分析反编译

      一般情况下我们想要了解别人的app怎么实现这个动画,这个效果的时候,总是会想到反编译一下,看下布局,看下代码实现.对,这对于有经验的玩家确实手到擒来了,但是初学者,根本就不知道怎么反编译,怎么看代 ...

  2. DotNet 资源大全中文版,内容包括:编译器、压缩、应用框架、应用模板、加密、数据库、反编译、IDE、日志、风格指南等

    DotNet 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-dotnet 是由 quozd 发起和维护.内容包括:编译器. ...

  3. Java 反编译工具哪家强?对比分析瞧一瞧

    前言 Java 反编译,一听可能觉得高深莫测,其实反编译并不是什么特别高级的操作,Java 对于 Class 字节码文件的生成有着严格的要求,如果你非常熟悉 Java 虚拟机规范,了解 Class 字 ...

  4. 用javap命令反编译来分析字符串问题

    编写Test.java.编译完后生成Test.class文件,然后对该文件运行javap -c Test命令,生成字节码指令.阅读并得出结论 一.s1和s2指向常量池的不同常量 ①java代码 pub ...

  5. Android应用安全防护和逆向分析 ——apk反编译

    概述 最近一直在学习Android应用安全相关和逆向分析的知识.现在移动app在安全方面是越来越重视了,特别是那些巨头企业涉及到钱的应用,那加密程度,简直是丧心病狂,密密麻麻.从这里可以看出,对于应用 ...

  6. Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正

    Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正 http://blog.csdn.net/jiangwei0910410003/article/details/51 ...

  7. 反编译字节码角度分析synchronized关键字的原理

    1.synchronized介绍 synchronized是java关键字.JVM规范中,synchronized关键字用于在线程并发执行时,保证同一时刻,只有一个线程可以执行某个代码块或方法:同时还 ...

  8. Java反编译代码分析(一)

    浅析如何读懂这种反编译过来的文件,不喜勿喷. 赋值 Node node; Node node1 = _$3.getChildNodes().item(0); node1; node1; JVM INS ...

  9. 防止apk反编译的技术分析浅谈--内存修改器篇

    声明: 1.本帖转载自http://jingyan.baidu.com/article/a24b33cd509eb719fe002b94.html,仅供自用,勿喷 Apk反编译修改器有很多.拿其中的比 ...

随机推荐

  1. c# .net 查找并安装CA根证书

    https CA根证书 用的是证书指纹来查找. 在用 collection.Find 之前 ,X509Store 一定要打开(Open),否则找到的数量(X509Certificate2Collect ...

  2. .net core 使用ClaimsIdentity实现登录授权

    一.新建用户 1.先新建一个用户表,用户存储用户信息. public class UserInfo { public const string Salt = "cesi"; [Ke ...

  3. 【GStreamer开发】GStreamer基础教程11——调试工具

    目标 有时我们的应用并没有按照我们的预期来工作,并且在总线上获得的错误信息也没有足够的内容.这时我们该怎么办呢?幸运的时,GStreamer自身提供了大量的调试信息,通常这些信息会给出一些线索,指向出 ...

  4. confluence6.14.1linux安装破解

    一.简介 Confluence为团队提供一个协作环境.在这里,团队成员齐心协力,各擅其能,协同地编写文档和管理项目.从此打破不同团队.不同部门以及个人之间信息孤岛的僵局,Confluence真正实现了 ...

  5. python format函数/print 函数详细讲解(4)

    在python开发过程中,print函数和format函数使用场景特别多,下面分别详细讲解两个函数的用法. 一.print函数 print翻译为中文指打印,在python中能直接输出到控制台,我们可以 ...

  6. VMware中安装Ubntu

    "懦夫没有能力去表现爱:爱是勇者的特权"----甘地 原文请见: https://blog.csdn.net/wumumang/article/details/54099997 一 ...

  7. 《ucore lab6》实验报告

    资源 ucore在线实验指导书 我的ucore实验代码 练习1: 使用 Round Robin 调度算法(不需要编码) 题目 完成练习0后,建议大家比较一下(可用kdiff3等文件比较软件) 个人完成 ...

  8. Python3实现自动查询成绩(主要使用的包有Tesseract-OCR、PIL、execjs、pytesseract、BeautifulSoup)

    前提:本文仅作为技术训练,不可利用技术做非法的事. 某考试的成绩查询页面如下:查询成绩需要的数据有准考证号或者身份证.考生姓名.验证码.现在使用python来实现自动查询指定人员的考试成绩(不知道准考 ...

  9. todo...git ssh http的区别

    todo...git ssh http的区别 https://www.jianshu.com/p/2cced982009f https://www.cnblogs.com/skating/p/6296 ...

  10. 【转】MySQL中EXISTS的用法

    原文链接:https://www.cnblogs.com/qlqwjy/p/8598091.html 比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,Compan ...