最近在编码的过程中发现自己的android应用基础还是有点薄弱,利用这个国庆好好补充一下。我阅读的《第一行代码Android》是第三版,与第二版最大的区别是用kotlin来讲解的android知识,特别适合我这种kotlin 0基础的人。因为这本书的是穿插来讲解kotlin的,因此在这里用一篇文章来记录下自己的kotlin笔记的基础知识。
kotlin中的变量和大多数语言不同,变量只有两种定义方法。var和val。
val是用于定义不可变的变量,像常量或String类型的变量,类似于java中的final和C语言中被const修饰过的变量。
var是用于定义可变的变量,定义之后变量可以被重新赋值。
val a = 10
var b = 10
a = 20 //错误写法
b = 20
为什么kotlin可以这么定义变量是因为kotlin有强大的类型自动推断功能。比如说
val a = 10
那么现在变量a的数据类型就是Int数据类型。
当然我们经常会延迟给变量赋值。那么这个时候我们在定义变量的时候,就可以指定变量数据类型。
var a : Int = 10
普通函数,看到目前为止,我觉得函数没有什么需要特别记录的,看一眼函数的基本写法,基本都能明白了。如果后面有什么特别需要注意的东西,我再到这里补充。
fun functionName(a : Int, b : Int) : Int {
return 0
}
补充:后面读书的时候,还是遇到了一些高级函数的用法,另写了一篇《第一行代码Android》kotlin总结之函数专题文章来学习
kotlin中的逻辑控制和我见过的其他语言还是有比较大的变化的,但是也感觉蛮有意思的。
if条件语句和其他语言没有任何区别,相信我自己也不会忘记,这里就不记录了。
when的用法和switch case有点类似,但是kotlin中是加强版的,个人很喜欢这个东西。
when语言支持传入一个任意类型的参数,然后可以在when的结构体中定义一些列的条件。大概使用方法如下:
匹配值 -> {执行逻辑} //如果执行逻辑只有一行,{}可以省略
return when (name) {
"master" -> 1
"li" -> 2
else -> 3
}
这样子的代码看起来舒服了好多,太治愈代码强迫症患者了。而且还避免了swtich的忘记写break的问题。
仅仅到这里就完了吗?不,前面说过了是加强版,还可以做类型匹配
when (num) {
is Int -> xxx
is Doubel -> xxx
else -> xxx
}
kotlin中的循环有for和while,while循环和其他语言没有多大差别,暂时不记录了。遇到了再补充
for循环有没有多大差别,只是有一些我没见过的特殊的用法,在这里记录一下。
fun printNum0To10() {
for (i in 0..10) {
println(i)
}
}
打印结果为0,1,2,3,4,5,6,7,8, 9,10
fun printNum0To10() {
for (i in 0 until 10) {
println(i)
}
}
打印结果为0,1,2,3,4,5,6,7,8,9
fun printNum0To10() {
for (i in 0 until 10 step 2) {
println(i)
}
}
打印结果为0,2,4,6,8
fun printNum0To10() {
for (i in 10 downTo 1) {
println(i)
}
}
打印结果为10,9, 8, 7,6,5,4,3, 2,1
这样的写法表示的是[0,10].(如果看到我的这个写法,有点不明白,要复习下高中数学啦,哈哈)
对于新建一个对象,我觉得不用特别记录了,后面如果遇到特殊的,我再补充。主要是记录一下与其他语言有差异的点
kotlin中任何一个非抽象类默认都是不可以被继承的,相当于java中给类前面声明了final关键字。如果允许类被继承需要在类前面加open
关键字
//父类
open class Person {
//xxx
}
//子类
class Students() : Person() {
//xxx
}
自我感觉第一行代码这本书中,这一块讲的有点啰嗦了。没必要费大文笔了讲次构造函数,个人理解,次构造函数就是对主构造函数的一个补充
class Students(val sno : String, val grade : Int) : Person() {
//如果需要在构造函数中编写一点逻辑,kotlin提供了一个init函数
init {
///xxx
}
}
修饰词这一块和java中差异较小,这边仅仅记录一下有差异的点。
protected
:java中比kotlin中多了一个同一包路径下的类可见default
:kotlin中无支持(同一包路径下的类可见)internal
:java中无支持(同一模块中的类可见)