推荐阅读:
学习Kotlin(一)为什么使用Kotlin
学习Kotlin(二)基本语法
学习Kotlin(三)类和接口
学习Kotlin(四)对象与泛型
学习Kotlin(五)函数与Lambda表达式
学习Kotlin(六)扩展与委托
学习Kotlin(七)反射和注解
学习Kotlin(八)其他技术
Kotlin学习资料总汇

目录

一、分号;
二、定义变量、常量
三、字符串模板与字符串面值
四、自动类型转换
五、定义函数
六、注释
七、控制流
八、集合


一、分号;

在Java中,使用分号;标志一句完整代码的结束。在Kotlin中,一句代码结束后不用添加分号。

二、定义变量、常量

Java定义变量时把数据类型放在前面,变量名放在后面。

int a = 1;
int b;
b = 2;

Kotlin用var定义变量,把数据类型放在后面,并用冒号:隔开。

var a: Int = 1
var b: Int
b = 2

Java用final定义常量,把final放在数据类型前面。

final int a = 1;
final int b;
b = 2;

Kotlin用val定义常量,把数据类型放在后面,并用冒号:隔开。

val a: Int = 1
val b: Int
b = 2

三、字符串模板与字符串面值

1.字符串模板在Kotlin中,字符串可以包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美元符($)开头,由一个简单的名字构成,如:

var a: String = "a"
var b: String = "b"
var c: String = "$a$b"

上面几行代码在Java中就等于

String a = "a";
String b = "b"
String c = a + b

2.字符串字面值Kotlin有两种字符串面值,转义字符串和原生字符串。

  • 转义字符串转义字符串跟java字符串一样,转义采用反斜杠方式,如:
var a: String = "a"
var b: String = "b"
Toast.makeText(this, "$a\n$b", Toast.LENGTH_SHORT).show()

运行代码:

  • 原生字符串原生字符串可以用三个"""作为分隔符括起来,内部没有转义并且可以包含换行和任何其他字符:
var a: String = "a"
var b: String = "b"
var c: String = """$a$b"""
Toast.makeText(this, c, Toast.LENGTH_SHORT).show()

运行代码:

可以看到前面有一段空格,这个时候可以通过trimMargin() 函数去除前导空格:

var a: String = "a"
var b: String = "b"
var c: String = """|$a$b""".trimMargin()
Toast.makeText(this, c, Toast.LENGTH_SHORT).show()

运行代码:

如上面例子所示,在需要去掉前导空格的那一行前面加上竖杠"|",再调用trimMargin()方法,就可以去掉前导空格。

四、自动类型转换

Kotlin在定义变量或者常量时给他赋值,可以不指定他的类型,如:

var a = "aaa" //这里的a是String类型
val b = 1 //这里的b是Int类型

五、定义函数

  • 无返回值无参数

Java定义无返回值无参数方法,返回类型是void

    void abc() {}

Kotlin定义无返回值无参数函数,返回Unit

fun abc(): Unit{}

也可以什么都不返回

fun abc(){}

可以看到Kotlin返回值的类型在函数末尾指定,并用冒号:分隔。

  • 无返回值有参数

Java定义无返回值有参数方法,返回类型是void

void abc(String str) {}

Kotlin定义无返回值有参数函数,返回Unit(或不返回)

fun abc(str: String) {}

括号里的参数跟定义变量常量一样,先指定参数名,再指定参数类型,并用冒号:分隔。

  • 有返回值有参数

Java定义有返回值有参数方法,返回类型是String

String abc(String str) {return "";
}

Kotlin定义有返回值有参数函数,返回类型是String

fun abc(str: String): String {return ""
}

返回值的类型在函数末尾指定,并用冒号":"分隔。

六、注释

  • 单行注释Java跟Kotlin一样//单行注释

  • 多行的块注释

Java跟Kotlin都可以这样

/* 这是一个多行的块注释。 */

Kotlin块注释支持嵌套,代码如下:

/*
这是一个多行的
块注释。/*再嵌套一个块注释 */
*/

而Java不支持块注释嵌套

七、控制流

1.if表达式与三元运算符

Kotlin和Java中的条件语句用法大致相同,其中不同的是Kotlin中的if语句本身就是表达式,有返回值,类似于Java的三元表达式,如下所示:Java三元表达式

c = a > b ? 3 : 4;//如果a>b,c=3,否则c=4

对应的Kotlin中的if表达式

var c = if (a > b) 3 else 4

如果 if 或 else 后面是代码块的话

var c = if (a > b) {3
} else {4
}

2.when与switch

Kotlin中没有Java的switch语句,取而代之的是更强大的when语句,如下所示:Java中的switch语句

int a = 0;
switch (a) {case 0:break;case 1:break;default:break;
}

Kotlin中对应的when语句

var a = 0
when (a) {0 -> {}1 -> {}else -> {}
}

注意:when语句在满足条件的分支执行后,会终止when语句执行,所以不用像switch语句那样每一个case都加上break。如果很多分支需要用相同的方式处理,when语句可以把多个分支条件放在一起,用逗号,分隔,如下所示:

var a = 0
when (a) {0 -> {}1,2 -> {//如果a=1或a=2,执行该代码块}else -> {}
}

when语句还能像if语句那样作为表达式:

var a = 1
var b = when (a) {0 -> 0  //如果a=0,则b=01 -> 1  //如果a=1,则b=1else -> 2 //如果a=其他,则b=2
}

3.关键字in

当我们要判断5是否在1-10里面,在Java中可以这么写

int a = 5;
for (int i = 0; i < 10; i++) {if (i == a) {return true;} else {return false;}
}

如果同样的判断用Kotlin来写,可以用关键字in来判断

if (5 in 1..10){//1..10代表1-10的意思return true
}else{return false
}

4.关键字is

在Kotlin中可以用关键字is判断对象的类型,如下所示:

fun hasPrefix(x: Any) = when(x) {//kotlin中所有类都有一个共同的父类: Anyis String -> {//如果x是String类型,执行该代码块}is Int -> {//如果x是Int类型,执行该代码块}else -> false
}

注意上面出现了AnyAny是Kotlin中所有类都有一个共同的父类,有点像Java中的Object,但这个类不是java.lang.Object,这个类只有equals()、 hashCode()、toString()方法。

5.for循环

如果你想要通过索引遍历一个数组或者一个list,可以使用for循环,如下所示:Java代码

for (int i = 0; i < array.size(); i++) {System.out.println(i);
}

Kotlin代码

for (i in array.indices) {println(array[i])
}

除了普通的用法之外,Kotlin的for循环还可以这样:

for ((index, value) in array.withIndex()) {println("the element at $index is $value")//index是索引,value是值
}

6.while 循环

Java跟Kotlin的while循环是一样的,分为while和do...while:

var i = 0
while(i++ < 10){
}do{}while(i++<10){
}

八、集合

Java中的List,Set,Map:

List<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(2);
integers.add(3);
integers.remove(1);
integers.get(2);
integers.clear();Map<String, Integer> map = new HashMap<>();
map.put("1", 1);
map.put("2", 2);
map.put("3", 3);
map.remove("1");
map.get("2");
map.clear();Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.remove(1);
set.contains(2);
set.clear();

Kotlin也有List,Set,Map,但Kotlin中的List,Set,Map都是不可修改的

上图红色代表编译错误。就是说Kotlin的List,Set,Map中没有可以修改集合的方法,是只读的。当然Kotlin还提供了可以读写的集合,分别是MutableList,MutableSet,MutableMap,这些集合有可以修改集合的方法。

下面介绍一些Kotlin常用创建集合对象的函数:listOf:用于创建List对象

var list: List<Int> = listOf<Int>()

setOf:用于创建Set对象

var set: Set<Int> = setOf<Int>()

mapOf:用于创建Map对象

var map: Map<String, Int> = mapOf<String, Int>()

mutableListOf:用于创建MutableListOf对象

var mutableList: MutableList<Int> = mutableListOf()
mutableList.add(1)
mutableList.add(2)
mutableList.add(3)
mutableList.remove(1)
mutableList.get(2)
mutableList.clear()

mutableSetOf:用于创建MutableSetOf对象

var mutableSet: MutableSet<Int> = mutableSetOf()
mutableSet.add(1)
mutableSet.add(2)
mutableSet.add(3)
mutableSet.remove(1)
mutableSet.contains(2)
mutableSet.clear()

mutableMapOf:用于创建MutableMapOf对象

var mutableMap: MutableMap<String, Int> = mutableMapOf()
mutableMap.put("1", 1)
mutableMap.put("2", 2)
mutableMap.put("3", 3)
mutableMap.remove("1")
mutableMap.get("2")
mutableMap.clear()

总结

本篇文章主要对比了Java跟Kotlin的基本语法在写法上的区别。会了基本语法,就等于踏出了从Java转到Kotlin的第一步。

原文链接:https://juejin.im/post/5a7ba5066fb9a063563106ef

学习Kotlin(二)基本语法相关推荐

  1. Vue2.0学习笔记二 基础语法

    1. Mustache语法 Mustache语法也叫插值表达式,Mustache语法式通过{{}}渲染到页面,并且数据是响应式的. 数据的响应式:数据的变化导致页面的内容随之变化 效果图: 2. 指令 ...

  2. WPF学习日记(二)——XAML语法

    XAML语法 1.XAML文档的树形结构   XAML使用标签来定义UI元素,每个标签对应.NET Framework类库中的一个控件类.通过设置标签的Attribute,不但可以对标签所对应控件对象 ...

  3. vue3学习日记二 setup语法糖

    1.基本语法 <script setup> console.log('hello script setup') </script> 2.顶层的绑定会暴露给模板,即在顶层声明的变 ...

  4. 学习Kotlin(八)其他技术

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  5. 学习Kotlin(七)反射和注解

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  6. 学习Kotlin(六)扩展与委托

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  7. 学习Kotlin(五)函数与Lambda表达式

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  8. 学习Kotlin(四)对象与泛型

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  9. 学习Kotlin(三)类和接口

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

最新文章

  1. Datawhale组队学习周报(第040周)
  2. (五) openwrt打包过程
  3. Sylius不需要缓存使用默认地址
  4. 跨平台 获取系统信息的python库 http://support.hyperic.com/disp
  5. Linux 设备驱动的并发控制
  6. PhpSpreadsheet 电子表格(excel) PHP处理笔记
  7. zabbix替代smokeping的解决方案
  8. 对于开发 0 bug 代码的思考——Design by Contract 契约设计
  9. 智慧交通前瞻:如何解决城市发展“心病”?
  10. MATLAB 2018a 安装
  11. Vue项目demo汇总
  12. Android 界面设计 简约个人求职简历表格
  13. Ansys模态计算结果图片批量导出命令流
  14. android平板怎么快速截屏,平板怎样截图(iPad截屏的3种方式)
  15. Ubuntu 16.04 系统装机、编译环境配置及代码编译过程小结
  16. python环境安装 (win7)
  17. Nodejs pm2 使用
  18. 锁定计算机过久电脑自动关机,如何设置电脑在某个或一段时间后自动关机
  19. 关于XDR的这些问题你都了解吗?
  20. 2048AI设计与实现

热门文章

  1. 二叉树 二度节点和叶子节点之间的数量关系
  2. 深度学习核心技术精讲100篇(四十九)-半监督学习在金融文本分类上的探索和实践
  3. 运筹学最优化理论系列概念-单纯形法原理解析
  4. Flink从入门到精通100篇(七)-如何基于 Flink 搭建一个实用有效的在线实时反欺诈平台?
  5. Flink从入门到精通100篇(八)-美团点评是如何在 Flink平台建立 实时数仓的?
  6. java messagebox 关闭_wince/WinForm下实现一个自动关闭的MessageBox
  7. hc05与单片机连接图_单片机科普:单片机的IO口不够用了怎么办?如何扩展单片机的IO口...
  8. tf_geometric的安装
  9. python type函数
  10. Ospaf项目-commits词频统计模块