第 1 章 开篇综述

第 1 章 开篇综述

Java诞生到现在已经有20多年了,Java仍然是非常热门的编程语言之一,很多平台使用Java开发。但由于历史的原因Java语法有些繁琐、冗余,而本书要介绍的Kotlin语言设计目标是取代Java语言,简化应用开发。

1.1 Kotlin语言简介

Kotlin语言是基于Java虚拟机(Java Virtual Machine 简称JVM)的现代计算机语言。作为一种Java虚拟机语言Kotlin编写的程序可以运行在任何Java能够运行的地方。

1.1.1 Kotlin语言历史

Kotlin语言是JetBrains公司1开发的。JetBrains公司是著名的计算机语言开发工具提供商,最著名的当属Java集成开发工具IntelliJ IDEA。作为开发工具提供商JetBrains对于Java语言有着深入的理解,有着迫切地化繁为简的需求。JetBrains从2010年开始构思,2011年推出Kotlin项目;2012年将Kotlin项目开源;2016年发布一个稳定版1.0;2017谷歌I/O全球开发者大会上,谷歌宣布Kotlin语言成为Android应用开发一级语言。

1JetBrains是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄罗斯的圣彼得堡及美国的波士顿设有开发团队。

至于这种新的语言为什么命名为Kotlin?这是因为新语言是由JetBrains的俄罗斯圣彼得堡罗斯团队设计和开发的,他们想用一个岛来命名新语言,或许因为Java命名源自于爪哇(Java)岛,这里盛产Java咖啡。他们找到了位于圣彼得堡以西约30公里处芬兰湾中的一个科特林岛,科特林的英文是Kotlin,因此将新语言命名为Kotlin。

1.1.2 Kotlin语言设计目标

Kotlin首先被设计为用来取代Java语言。目前主要的应用场景:

  • 服务器端编程。基于JavaEE的Web服务器端开发和数据库编程等。
  • Android应用开发。替代Java语言编写Android应用程序。

Kotlin这两种场景的应用都需要Java虚拟机(Java Virtual Machine,JVM)也是本书重点介绍的。

此外,Kotlin还有其他目前处于原型阶段的应用场景:

  • 编译成JavaScript代码。Kotlin代码还可以编译成JavaScript代码,这样就可以应用于Web前端开发。
  • 编译成本地(Native)代码。Kotlin代码还可以编译成本地(Native)代码,本地代码运行不再需要Java虚拟机,类似于C语言。

1.2 Kotlin语言特点

Kotlin具体现代计算机语言特点,如类型推导、函数式编程等。下面详细解释一下:

  1. 简洁

    简洁是Kotlin最主要的特点,实现同样的功能Kotlin代码量会Java代码量缩减很多。Kotlin中数据类、类型推导、Lambda表达式和函数式编程都可以大大减少代码行数,使得代码更加简洁。

  2. 安全

    Kotlin可以有效地防止程序员疏忽所导致的类型错误。Kotlin与Java一样都是静态类型语言2,编译器会在编译期间检查数据类型,这样程序员会在编码期间发现自己的错误,避免错误在运行运行期发生而导致系统崩溃。另外,Kotlin与Swift3类似支持非空和可空类型,默认情况下Kotlin与Swift的数据类型声明的变量都是不能接收空值(null)的,这样的设计可以防止试图调用空对象而引发的空指针异常(NullPointerException),空指针异常也会导致系统崩溃。

  3. 类型推导

    Kotlin与Swift类似都支持类型推导,Kotlin编译器可以根据变量所在上下文环境推导出它的数据类型,这样在变量时可以省略明确指定数据类型 。

  4. 支持函数式编程

    作为现代计算机语言Kotlin支持函数式编程,函数式编程优点:代码变得简洁、增强线程安全和便于测试。

  5. 支持面向对象

    虽然Kotlin支持函数式编程,但也不排除面向对象。面向对象与函数式编程并不是水火不容,函数式编程是对面向对象重要补充,而且面向对象仍然是编程语言的主流,面向对象便于系统分析与设计。

  6. Java具有良好的互操作性

    Kotlin与Java具有100%互操作性,Kotlin不需要任何转换或包装就可以调用Java对象,反之亦然。Kotlin完全可以使用现有的Java框架或库。

  7. 免费开源

    Kotlin源代码是开源免费的,它采用Apache 2许可证,源代码下载地址https://github.com/jetbrains/kotlin

2静态类型语言会在编译期检查变量或表达式数据类型,如Java和C++等。与静态类型语言相对应的是动态类型语言,动态类型语言会在运行期检查变量或表达式数据类型,如Python和PHP等。

3Swift语言是苹果公司推出的编程语言,目前主要应用于苹果的macOS、iOS、tvOS和watchOS 4等应用开发。

1.3 Kotlin与Java虚拟机

Kotlin是依赖于Java虚拟机运行的语言,因此初学者有必要熟悉一下Java虚拟机作用。

1.3.1 Java虚拟机

Java应用程序能够跨平台运行,主要是通过Java虚拟机实现的。如图1-1所示,不同软硬件平台Java虚拟机是不同的,Java虚拟机往下是不同的操作系统和CPU,使用或开发时需要下载不同的JRE或JDK版本。Java虚拟机往上是Java应用程序,Java虚拟机屏蔽了不同软硬件平台,Java应用程序不需要修改,不需要重新编译直接可以在其他平台上运行。

{%}

图1-1 Java虚拟机

1.3.2 Kotlin应用程序运行过程

要了解Kotlin应用程序运行过程,则需要先了解Java应用的运行过程。

Java程序运行过程如图1-2所示,首先由Java编译器将Java源文件(*.java文件)编译成为字节码文件(*.class文件),这个过程可以通过JDK(Java开发工具包)提供的javac命令进行编译。当运行Java字节码文件时,由Java虚拟机中的解释器将字节码解释成为机器码去执行,这个过程可以通过JRE(Java运行环境)提供的java命令解释运行。

图1-2 Java程序运行过程

基于Java虚拟机的Kotlin应用程序运行过程类似于Java程序运行过程,其过程如图1-3所示,首先由Kotlin编译器将Kotlin源文件(*.kt文件)编译成为字节码文件(* Kt.class文件),注意这个过程中文件名会发生变化,会增加Kt后缀,例如:Hello.kt源文件编译后为HelloKt.class文件。编译过程可以通过Kotlin编译器提供的kotlinc命令进行编译。当运行Kotlin字节码文件时,由Java解释器将字节码解释成为机器码去执行,这个过程也是通过java命令解释,但需要Kotlin运行时库支持才能正常运行。

图1-3 Kotlin基于Java虚拟机的应用程序运行过程

1.4 如何获得帮助

对于一个初学者必须要熟悉如下几个Kotlin相关网址:

下面重点说明Kotlin标准库,其他的网址不再赘述。Kotlin标准库是由Kotlin官方开发的,Kotlin语言是基于Java的,能够与Java完全地互操作,所以Kotlin可以调用Java对象,反之亦然。所以,Kotlin语言尽可能利用Java自带库,然后在这些库上进行一些扩展(Extension)和必要的封装,这就是Kotlin标准库所包含的内容。

提示 扩展(Extension)是Kotlin、C#、Swift和Objective-C等语言特有的新功能,类似于继承机制,它可以在一个已有的类上扩展函数或属性,从而为该类添加新功能。有关扩展后面第11章会详细介绍。

作为Kotlin程序员应该熟悉如何使用Kotlin标准库的API文档。打开Kotlin标准库网址https://kotlinlang.org/api/latest/jvm/stdlib/index.html,页面如图1-4所示。

图1-4 Kotlin标准库的API文档

下面介绍一下如何使用API文档,熟悉一下API文档页面中的各个部分含义,如图1-5所示是Array类API文档,从图中可见类中包含:构造函数、函数和扩展函数,此外,还包含属性和从父类继承下来的函数和属性等内容。接口与类API的类似这里不再赘述。

图1-5 API文档页面各个部分

目录

  • 目录
  • 简介
  • 前言
  • 第 1 章 开篇综述
  • 第 2 章 开发环境搭建
  • 第 3 章 第一个Kotlin程序
  • 第 4 章 Kotlin语法基础
  • 第 5 章 Kotlin编码规范
  • 第 6 章 数据类型
  • 第 7 章 字符串
  • 第 8 章 运算符
  • 第 9 章 程序流程控制
  • 第 10 章 函数
  • 第 11 章 面向对象编程
  • 第 12 章 继承与多态
  • 第 13 章 抽象类与接口
  • 第 14 章 函数式编程基石——高阶函数和Lambda表达式
  • 第 15 章 泛型
  • 第 16 章 数据容器——数组和集合
  • 第 17 章 Kotlin中函数式编程API
  • 第 18 章 异常处理
  • 第 19 章 线程
  • 第 20 章 协程
  • 第 21 章 Kotlin与Java混合编程
  • 第 22 章 Kotlin I/O与文件管理
  • 第 23 章 网络编程
  • 第 24 章 Kotlin与Java Swing图形用户界面编程
  • 第 25 章 轻量级SQL框架——Exposed
  • 第 26 章 反射
  • 第 27 章 注解
  • 第 28 章 项目实战1:开发PetStore宠物商店项目
  • 第 29 章 项目实战2:开发Kotlin版QQ2006聊天工具