文章大纲

一、Kotlin简介
二、Kotlin相比Java优势
三、Kotlin与Java混合使用
四、参考文章

 

一、Kotlin简介

1. 什么是Kotlin

安卓和Java,前者是最受欢迎的移动开源系统,后者是最流行的编程语言。二者背后的谷歌和甲骨文,这两大巨头之间的恩怨已经持续了八年之久,主要是安卓侵权Java的版权之战。八年间的反反复复。。。
新事物或者新技术的出现虽然不一定要替代旧技术,但是它的到来是无可阻挡的。就像拥有黑白电视的人,当彩色电视出现了,他们可以选择是否替换为彩色电视,却无法阻止彩色电视的诞生。科技是一个很玄妙的事实,总会出现一个新的技术来挑战长期建立好的秩序,就像之前我们在谈论Android开发时,Java是主要的编程语言,但是其实有很多可用于编写Android应用程序也符合JVM的编程语言·,而这其中Kotlin成为了那个打破秩序的先行者。事实上,在经过了谷歌的高调宣传之后,许多程序员已经将Kotlin称为编写Android应用程序的高级语言。Peter Ducker曾经说过:“新技术想要取代旧技术,它必须至少有10倍的好处。”
Kotlin 是一个用于现代多平台应用的静态编程语言 ,由 JetBrains 开发。JetBrains,作为广受欢迎的 Java IDE IntelliJ 的提供商,在 Apache 许可下已经开源其Kotlin 编程语言。而Android Studio这款官方的Android开发IDE也是基于IntelliJ开发出来的。Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。
Kotlin是一门静态语言,支持多种平台,包括移动端、服务端以及浏览器端,此外,Kotlin还是一门融合了面向对象与函数式编程的语言,支持泛型、安全的空判断,并且Kotlin与Java可以做到完全的交互。

2. Kotlin特点

(1)代码量少且代码末尾没有分号。
(2)被调用的方法需放到上边。
(3)Kotlin是空安全的:在编译时期就处理了各种null的情况,避免了执行时异常。
(4)它可扩展函数:我们也可以扩展任意类的更多的特性。
(5)它也是函数式的:比如,使用lambda表达式来更方便地解决问题。
(6)高度互操作性:你可以继续使用所有用Java写的代码和库,甚至可以在一个项目中使用Kotlin和Java
(7)两种语言混合编程

3. 为什么选择 Kotlin?

(1)简洁: 大大减少样板代码的数量。
(2)安全: 避免空指针异常等整个类的错误。
(3)互操作性: 充分利用 JVM、Android 和浏览器的现有库。
(4)工具友好: 可用任何 Java IDE 或者使用命令行构建。

二、Kotlin相比Java优势

null安全性
它可以让编译器系统地标记潜在的空指针解引用,避免运行时错误。

智能的类型推断

val a =“abc”//类型推断为String
val b = 4 //类型推断为Int
val c:Double = 0.7 //显式声明
val d:List <String> = ArrayList
if(obj is String){
print(obj.toUpperCase())// obj现在已知是一个String
}

直观的等式
没有了equals()和==的混淆:

val john1 =Person(“John”)
val john2 =Person(“John”)
john1 == john2 // true(结构相等)
john1 === john2 // false(引用相等)

没有更多的分号
为什么分号在Java中是必需的?没有分号可以更快的编写代码。

没有new关键字
省去你不要的代码

Lambdas
超级简洁:

val sum = { x: Int, y: Int -> x + y }   // type: (Int, Int) -> Int
val res = sum(4,7) // res == 11

三、Kotlin与Java混合使用

1. Java转Kotlin

选中Java文件,点击菜单栏Code-->Convert Java File to Kotlin File ,即可把java文件转换成kotlin文件。

 

点击右上角提示的 configue ,然后会出现一个弹窗。

 

设置工程里面哪些需要配置kotlin文件支持。比如我这里选中的是single module,module名为kotlinlibrary。还可以选择kotlin的编译和运行版本号,比如我选择的1.2.30,然后点击OK即可,如下图所示。

 

然后我们就可以看到项目根路径的build.gradle和kotlinlibrary这个module的build.gradle都做了kotlin的配置。如图所示:

 

kotlinlibrary 的 build.gradle 配置:

 

2. Kotlin转Java

点击菜单栏Tools-->Kotlin-->Decompile Kotlin To Java 就可以了

 

四、参考文章

  1. https://blog.csdn.net/admans/article/details/86487188
  2. https://blog.csdn.net/yudbl/article/details/86618633
  3. https://www.zhihu.com/question/37288009

愿世界待你美好如初

Kotlin介绍(非原创)的更多相关文章

  1. Netty简单介绍(非原创)

    文章大纲 一.Netty基础介绍二.Netty代码实战三.项目源码下载四.参考文章   一.Netty基础介绍 1. 简介 官方定义为:”Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地 ...

  2. Java之Spring Cloud概念介绍(非原创)

    文章大纲 一.理解微服务二.Spring Cloud知识介绍三.Spring Cloud全家桶四.参考资料下载五.参考文章 一.理解微服务   我们通过软件架构演进过程来理解什么是微服务,软件架构的发 ...

  3. FastDFS介绍(非原创)

    文章大纲 一.FastDFS介绍二.FastDFS安装与启动(Linux系统)三.Java客户端上传图片四.参考文章   一.FastDFS介绍 1. 什么是FastDFS FastDFS是用C语言编 ...

  4. Linux下high CPU分析心得【非原创】

    非原创,搬运至此以作笔记, 原地址:http://www.cnitblog.com/houcy/archive/2012/11/28/86801.html 1.用top命令查看哪个进程占用CPU高ga ...

  5. CSS样式命名整理(非原创)

    非原创,具体出自哪里忘了,如果侵害您的利益,请联系我. CSS样式命名整理 页面结构 容器: container/wrap 整体宽度:wrapper 页头:header 内容:content 页面主体 ...

  6. 非原创。使用ajax加载控件

    非原创.来自博客园老赵. public class ViewManager<T> where T : System.Web.UI.UserControl { private System. ...

  7. Java 表达式解析(非原创)

    因项目需要,在网上找来一套表达式解析方法,由于原来的方法太过于零散,不利于移植,现在整理在同一文件内: 文件中包含5个内部类,源码如下: import java.util.ArrayList; imp ...

  8. Java Interface 是常量存放的最佳地点吗?(转帖学习,非原创)

    Java Interface 是常量存放的最佳地点吗?(转帖学习,非原创) 由于java interface中声明的字段在编译时会自动加上static final的修饰符,即声明为常量.因而inter ...

  9. 用RD,GR,BL三个方法内代码生成一张图片(非原创,我只是完整了代码)

    我公开以下图片的源代码,,是ppm格式的,,自己找到能打开的工具.. (非原创,我加工的代码,可直接执行运行输出,缩略图能看到效果)  这是原博客 http://news.cnblogs.com/n/ ...

  10. Kotlin介绍

    Kotlin介绍 转 https://www.jianshu.com/p/d30406daaf25 Google在今年的IO大会上宣布,将Android开发的官方语言更换为Kotlin,作为跟着Goo ...

随机推荐

  1. Winform中封装DevExpress的MarqueeProgressBarComtrol实现弹窗式进度条效果

    场景 在Winform中实现弹窗式进度条 就是新建一个窗体,然后在窗体中加入进度条控件,然后在触发进度条的事件中将加载进度报告给 进度条控件. 注: 博客主页: https://blog.csdn.n ...

  2. gradle+shell实现自动系统签名

    前言 有时候我们的应用需要系统级的权限来实现一些功能(如静默安装),这时候需要给应用打上系统签名,常规操作打包apk,解压apk,删除META-INF中CERT.RSA和 CERT.SF,然后压缩,用 ...

  3. DevOps VS 职责分离

    原文地址: https://medium.com/@jeehad.jebeile/devops-and-segregation-of-duties-9c1a1bea022e 原文作者:Jeehad J ...

  4. 网络编程之tcp协议以及粘包问题

    网络编程tcp协议与socket以及单例的补充 一.单例补充 实现单列的几种方式 #方式一:classmethod # class Singleton: # # __instance = None # ...

  5. 服务器 vim模式下报错E37: No write since last change (add ! to override)

    故障现象: 使用vim修改文件报错,系统提示如下: E37: No write since last change (add ! to override) 故障原因: 文件为只读文件,无法修改. 解决 ...

  6. git 现在本地创建仓库 再 推送到 远程 github 仓库中

    今天,需要再本地使用git管理代码,但是当代码创建好的时候,想发布到github上面的私有仓库中,但是没有提前创建远端仓库,所以需要把本地git仓库推送到远端另外一个仓库了,下面进行简要记录,刚刚经过 ...

  7. 以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取【原创】

    以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号 ...

  8. 操作系统|VirtualBox for Mac(虚拟机软件)

    VirtualBox是德国一家软件公司InnoTek所开发的虚拟系统软件,它不仅具有丰富的特色,而且性能也很优异,更是开源的,成为了一个发布在GPL许可之下的自由软件.VirtualBox 可以在 L ...

  9. AcWing 901. 滑雪

    地址 https://www.acwing.com/problem/content/description/903/ 题目描述给定一个R行C列的矩阵,表示一个矩形网格滑雪场. 矩阵中第 i 行第 j ...

  10. SPOJ2829 TLE-Time Limit Exceeded

    题目链接--SPOJ 题目链接--洛谷 problem 给出n,m和一个长度为n的数列c.求有多少个数列a满足以下条件: \(1\le a_i < 2^m\) \(a_i\&a_{i-1 ...