系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正。如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN
Kotlin学习笔记(1)- 环境配置
Kotlin学习笔记(2)- 空安全
Kotlin学习笔记(3)- 语法
Kotlin学习笔记(4)- 流程控制
Kotlin学习笔记(5)- 类
Kotlin学习笔记(6)- 属性
Kotlin学习笔记(7)- 接口
Kotlin学习笔记(8)- 扩展
Kotlin学习笔记(8)- 扩展(续)
Kotlin学习笔记(9)- 数据类
Kotlin学习笔记(10)- 泛型
Kotlin学习笔记(11)- 内部类和嵌套类
Kotlin学习笔记(12)- 委托
Kotlin学习笔记(13)- 函数式编程
Kotlin学习笔记(14)- lambda

一、基础语法

  1. 在语句的结尾不用;

  2. 声明一个方法需要加关键字fun

  3. 如果函数是重载父类的方法,则需要加override关键字

  4. 方法中的参数格式为:形参名+冒号+形参类型

    fun a (str : String, num : Int)

二、定义类

  1. kotlin默认唯一构造器,暨类定义同时也是构造器

    class Person(name : String, age : int) {
    init{  // do some thing
    }
    } 翻译成java为:final public class Person {public Person(String name, int age){init();}private void init(){// do some thing}
    }
  2. 仔细看会发现,翻译成的java类定义前面有final修饰符,因为在kotlin中类默认为final的,也就是不可继承的。如果要继承,需要声明为open,或者abstract

    open class Person(name : String, age : int) {init{  // do some thing
    }
    } 
  3. 如果init中没有操作,则可以省略

    class Person(name : String, age : int)
  4. 如果连参数也没有,甚至可以这么写

    class Person

三、定义函数方法

  1. 函数方法要加fun关键字,方法的返回类型写在参数后

    fun sum (a : Int, b : Int) : Int {return a+b
    }
  2. 如果像上面这样,函数内只有一条语句,则可以直接赋值

    fun sum (a : Int, b : Int) : Int = a+b
  3. kotlin编译器会自动根据返回值推测方法返回类型

    fun sum (a : Int, b : Int) = a+b
  4. 如果方法需要返回值,则返回Unit,类似java中的void,当然Unit也是可以忽略的

    fun printSum (a : Int, b : Int) : Unit = print(sum(a, b))
    //等价于
    fun printSum (a : Int, b : Int) = print(sum(a, b))

看到网上资料说,如果方法是public的,则必须要声明返回类型。但是我自己试验发现kotlin的方法默认是public的,同时上面说的几点都适用,也就是不是必须要明确声明返回类型。如有错误之处,欢迎随时拍砖指正。

四、定义变量

kotlin中将java中的变量演化成了两种:var表示变量,val便是常量(相当于java中用final修饰)

var a : Int = 1    // 定义一个普通变量
var b = 2          // 和方法的返回类型一样,编译器也会根据值自动判断变量类型
b = 3              // 普通变量可多次赋值
val c = 1          // 定义一个常量,和普通变量一样,编译器也会自动判断类型
c = 2              // 提示编译错误,无法运行。常量只能赋值一次
val d : Int        // 如果常量在定义的时候没有赋值,则必须明确类型
d = 1              // 赋值

五、使用泛型Array代替数组

例如最经典的main方法

Java:
public static void main(String[] args){// do some thing
}Kotlin:
fun main(args : Array<String>){// do some thing
}

六、条件语句

fun max(a: Int, b: Int): Int {if (a > b)return aelsereturn b
}

//或者也可以把if语句作为省略方法体的方法
fun max(a: Int, b: Int) = if (a > b) a else b

七、空值

在类型后面跟一个问号?表示可能为空,跟双感叹号!!表示一定不能为空。具体的请看我上一篇文章《Kotlin学习笔记(2)- 空指针》。

八、类型检测并自动转换

fun getStringLength (obj : Any) : Int? { // 通过is关键字做类型判断if(obj is String){ // 类型判断后,系统自动转型,这里自动将obj转为String类型return obj.length} // 类型判断之外,obj依然是Any类型,没有被转型,所以不能调用length,会报编译错误var length = obj.lengthreturn null
}
fun getStringLength (obj : Any) : Int? { // 通过is关键字做类型判断,因为第一个判断条件已经通过并自动转型, // 所以第二个判断时obj可以直接作为String类型使用if(obj is String && obj.length > 0){ // 类型判断后,系统自动转型,这里自动将obj转为String类型return obj.length}return null
}

九、循环

  1. for循环,使用in关键字

    fun main(args : Array<String>) {for(arg in args)print(arg)for(i in args.indices)print(args[i])for((index, value) in args.withIndex()){println("index : $index, value : $value")}
    }
  2. while循环,和java的基本一致

    fun main(args : Array<String>) {var i = 0while (i < args.size){print(args[i++])}var j = 0do{print(args[j])}while (++j<args.size)
    }

十、when表达式(类似于java中的switch)

when的特性与switch差不多,都是通过列举比对列举出来的条件进行匹配,满足条件的分支会被执行。when可以作为表达式,也可以作为声明。如果用作表达式的话,那么满足条件的分支就是总表达式。如果用做声明,不满足条件的分支的的的值会被忽略,只保留满足条件的分支,而且返回的值也是最后一个表达式的值。

  1. 传统用法

    var x = 3
    when (x) {1 -> print(1)2 -> print(2)else -> print(5)
    }
  2. 作为表达式,满足条件的分支会被作为when的返回值

    var x = 3
    var result = when (x) {1 -> 12 -> 2else -> 5
    }
  3. 分支条件一致,如果有分支可以用同样的方式处理的话, 分支条件可以连在一起处理。

    when (x) {0,1 -> print("x == 0 or x == 1")else -> print("otherwise")
    }
  4. 使用任意表达式作为分支的条件

    when (x) {parseInt(s) -> print("s encode x")else -> print("s does not encode x")
    }when (x) {in 1..10 -> print("x is in the range")in validNumbers -> print("x is valid")!in 10..20 -> print("x is outside the range")else -> print("none of the above")
    }

Kotlin学习笔记(3)- 语法相关推荐

  1. Kotlin学习笔记-基础语法

    去年学习过一遍Kotlin,相比java而言,Kotlin确实有许多方便的地方,但是学习之后一直没有真正拿来写项目,很久不用很多东西都已经忘记了.最近Google宣布Kotlin成为Android开发 ...

  2. Kotlin学习笔记(1)-- 基础语法

    文章目录 Kotlin学习笔记(1)-- 基础语法 输出 语法 代码 输出 可读可改(var) 语法 代码 输出 内置数据类型 只读变量(val) 类型推断 编译时常量 语法 代码 输出 引用类型 r ...

  3. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

  4. Kotlin学习笔记(2)- 空安全

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  5. Kotlin学习笔记(1)- 环境配置

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  6. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段

    Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...

  7. Kotlin学习笔记20 阶段复习2

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...

  8. Kotlin学习笔记12——数据类和密封类

    Kotlin学习笔记12--数据类和密封类 前言 数据类 在类体中声明的属性 复制 componentN 解构声明 密封类 尾巴 前言 上一篇,我们学习了Kotlin中的拓展,今天继续来学习Kotli ...

  9. Kotlin学习笔记1——变量、函数

    Kotlin学习笔记1 (学习教材为<第一行代码(第三版)>by郭霖) 1.Kotlin概述 ​ Java虚拟机不关心class文件的编译来源,即只要是符合规格的class文件,Java虚 ...

最新文章

  1. 第2章 S交换机管理平面安全
  2. 波士顿动力CEO:不排斥军方订单,就想你粗暴地对待机器狗
  3. MATLAB | Matlab 2020a/202b/2018a/2019b安装教程及资源及matlab基本案例(图像练手教程)
  4. 【机器学习算法专题(蓄力计划)】十八、机器学习中SVM算法中的硬间隔和软间隔
  5. java开发工程师工作内容怎么写
  6. java各个平台订单动态对接_平台订单丨全国各地最新采购、代加工订单,免费联系对接...
  7. 【Day02】测试 Primise、setTimeout等的执行顺序
  8. java jar metainf_java – 从生成的jar文件中排除META-INF / maven文件夹
  9. css 根据宽度适应
  10. .NET 将 .config 文件嵌入到程序集
  11. html5游戏开发实战第三章,我的启蒙--HTML5 第三章 Canvas
  12. vb.net 画多个矩形_电气原理图和接线图识图方法,电气接线图怎么画?
  13. 蒙特卡罗 Monte Carlo 模拟
  14. vga分辨率与时序配置
  15. Unity3D 常用快捷键
  16. 离散傅里叶变换的核心公式
  17. [转帖]优麒麟和银河麒麟操作系统都出自于天津麒麟信息技术有限公司
  18. itunes登录时显示服务器失败怎么办,苹果手机itunes验证失败怎么办
  19. 如何在linux系统下的抓包文件保存在u盘里,在xp系统中打开,【Linux】Wireshark在Linux系统下的安装及使用...
  20. Day11:麦卡锡91函数(McCarthy 91)

热门文章

  1. python 三元运算符求abc_python三元运算符实现方法
  2. c语言调用函数计算分段函数值,输入x,计算并输出下列分段函数f(x)的值(保留2位小数) c语言...
  3. Docker安装redis 设置密码
  4. 【HDU 1735】字数统计(贪心,有缺陷的一道题)
  5. C++代码片段(四)萃取模板类的模板参数类型
  6. html大学生活主题班会,“大学生活”主题班会记录范文
  7. mysql 1280_技术分享 | MySQL 一次奇怪的故障分析
  8. Android程序的基本组件
  9. 内存泄露 内存溢出 内存碎片
  10. java 模板实现原理,Java Web 模板代码生成器的设计与实现详解