Kotlin学习-基础篇-01
Kotlin学习-基础篇
本文是本人在学习 Koitlin 期间记录的一些知识点,仅作参考,如有错误,欢迎指正
1、变量
val
(value的简写) 用来声明一个不可变的变量,对应Java中的 final
变量var
(variable的简写) 用来声明一个可变的变量,对应Java中的非 final
变量
当Kotlin无法自动推导变量类型时,需要显示声明变量类型,如:
1 | val a: Int = 10 |
Java和Kotlin数据类型对照表:
| Java基本数据类型 | Kotlin对象数据类型 | 数据类型说明 |
| :————: | :—————-: | :———: |
| int | Int | 整型 |
| long | Long | 长整型 |
| short | Short | 短整型 |
| float | Float | 单精度浮点型 |
| double | Double | 双精度浮点型 |
| boolean | Boolean | 布尔型 |
| char | Char | 字符型 |
| byte | Byte | 字节型 |
变量延迟初始化
lateinit
可以告诉Kotlin
编译器我会晚些时候对其进行初始化,避免一开始声明变量时需赋值为空,示例如下:
1 | class Class1 { |
为了避免因变量没有初始化导致程序崩溃,故通过,::params.isInitialized
来判断变量是否已经初始化
2、函数
自定义函数,语法规则如下:
1 | fun methodName(param1:Int, param2:Int):Int{ |
3、if 条件语句
Kotlin
中的 if
语句相比于 Java 有一个额外功能,它可以有返回值if
语句中每一个条件中最后一行代码可作为返回值,如下:
1 | fun methodName(param1:Int, param2:Int):Int{ |
4、when 条件语句
when
语句允许掺入一个任意类型的参数,然后可以在when
的结构体中定义一系列条件。
格式为:
1 | 匹配值 -> {执行逻辑} |
示例,不同学生对应不同分数:
1 | fun getScore(name:String) = when(name){ |
when
不带参数的用法,示例:
1 | fun getScore(name:String) = when{ |
when语句也可用作类型匹配,示例:
1 | fun checkNumber(num:Number){ |
5、循环语句
区间
Kotlin中创建一个区间:
双端闭区间,如下:
1 | val range = 0..10 |
单端闭区间,如下:
1 | val range = 0 until 10 |
注意:使用 ..
和 until
关键字都要求左端小于等于右端
降序区间,如下:
1 | val range = 10 downTo 1 |
for-in 循环
示例如下:
1 | for (i in 0..10){ |
由于 for-in
循环每次执行循环时区间范围递增 1,所以可使用 step
关键字来跳过一些元素
示例如下:
1 | for (i in 0..10 step 2){ |
6、面向对象
类与对象
Kotlin中创建一个对象,如下:
1 | class ClassName{ |
对这个类进行实例化,如下:
1 | val c = ClassName() |
类与构造对象
在Kotlin中任何一个非抽象类默认都是不可被继承的
使类可以被继承,如下:
1 | open class ClassName{ |
让一个类去继承另一个类,如下:
1 | class class1 : class2(){ |
Kotlin中的构造函数分为主构造函数和次构造函数
每一个类默认都会有一个不带参数的主构造函数,可显式地指定参数。
主构造函数特点没有函数体,直接定义在类名后面即可,如下:
1 | class class1(val params1:String, val params2:Int){ |
实例化,如下:
1 | val c = class1("Hello",10) |
当需要在主构造函数中编写一些逻辑时,
Kotlin提供了一个 init
结构体,可将主构造函数逻辑写在里面,如下:
1 | class class1(val params1:String, val params2:Int){ |
子类的构造函数必须调用父类中的构造函数,如下:
1 | //父类 |
注意,在Class1
类中不能将name
和age
声明成val
,因为在主构造函数中声明成var
或val
的参数将自动成为该类的字段。不加任何关键字,让它的作用域仅限定在主构造函数当中即可。
次构造函数
Kotlin规定,当一个类既有主构造函数也有次构造函数时,所有的次构造函数都必须调用主构造函数(包括间接调用),示例如下:
1 | class Class1(val son:String, val grade:Int, name:String, age:Int): |
次构造函数通过constructor
关键字来定义,这里定义的两个次构造函数。第一个接收的参数时name
和age
参数,又通过this
关键字调用了主构造函数,并将son
和grade
这两个参数赋值为初始值;第二个个次构造函数不接收任何参数,通过thsi
关键字调用了第一个次构造函数,并将参数赋值为初始值。第二个次构造函数间接调用了主构造函数,所以也是合法的.
接口
Kotlin中让一个类实现一个接口以及实现接口中的方法,如下:
1 | class Class1() : Class2() , InterfaceName{ |
实现接口使用逗号隔开,使用override
关键字来重写父类或者接口中的函数
Kotlin中允许对接口中定义的函数进行默认实现,示例如下:
1 | interface InterfaceName{ |
如果接口中的函数有了函数体,这个函数体中的内容就是它的默认实现,一个类去实现该接口时,会强制要求实现没有函数体的函数,不会强制要求实现有函数体的函数,不实现时就会自动使用默认的实现逻辑。
修饰符
Java 和 Kotlin 函数可见性修饰符对照表
| 修饰符 | Java | Kotlin |
| :—: | :—: | :—: |
| public | 所有类可见 | 所有类可见(默认)|
| private | 当前类可见 | 当前类可见 |
| protected | 当前类、子类、同一包路径下的类可见 | 当前类、子类可见 |
| default | 同一包路径下的类可见(默认) | 无 |
| internal | 无 | 同一模块中的类可见 |
数据类与单例类
数据类用于将服务器端或数据库中的数据映射到内存中,为编程逻辑提供数据模型的支持。
Kotlin中创建数据类,示例如下:
1 | data class Cellphone(val brand:String, val price:Double) |
当在一个类前面声明data
关键字时,便表明你希望这个类是一个数据类
当一个类中没有任何代码时,可以将大括号省略。
单例类
用于保证某个类在全局最多只能拥有一个实例,不同于Java中实现单例模式的方式,在 Kotlin 中实现非常简单。
Kotlin中创建单例类,创建类型选择“Object”,示例代码如下:
1 | object Singleton{ |
更多文章:
Kotlin学习知识点整理-基础篇-01
Kotlin学习知识点整理-基础篇-02
Kotlin学习知识点整理-基础篇-03
Kotlin学习知识点整理-进阶篇-04
写在最后:遨游在知识的海洋,永远对技术怀有一个敬畏之心