您的位置:首页 > 其它

新手上路,Kotlin学习笔记

2018-03-25 22:14 465 查看
        入行没几年的小码农,近期学习Kotlin,做一份笔记记录自己的理解,此文依据《Kotlin实战》这本书的流程记录,部分示例内容均摘自《Kotlin实战》,记下自己的理解。

一、从HelloWorld开始认识Kotlin

fun main(args: Array<String>) {
println("HelloWorld")
}
此代码即为Kotlin方式书写Java的main方法并打印HelloWorld
从该方法中可以看出Kotlin和Java不同的地方:
1、方法的声明使用的关键字为fun
2、参数的类型卸载变量名的后面
3、原本Java中String[]的表示方式改为了Array<String>,数字的表现方式变为了一个类(和集合是相同的)
4、println方法替代了Java中的System.out.println,该方法是kotlin库中的方法,还有很多类似的方法,讲Java的一些方法封装,便于使用
5、方法结尾没有分号,可以省略结尾的分号

二、方法(函数)

1、上面的main方法是一个没有返回值的方法,kotlin中对于没有返回值的方法,可以省略返回值。
对于有返回值的方法,将返回值位于参数之后,用冒号":"间隔,示例如下 fun methodSum(a: Int, b: Int): Int {
return a + b
}2、Kotlin可以将方法简化,如果是有返回值的方法,可以用等号“=”将方法和表达式(有返回值的为表达式)连接,示例如下
fun methodSum(a: Int, b: Int): Int = a + b
3、Kotlin对于方法的返回值,会自动做类型推导,对于明确的表达式返回值,可以省略返回值的声明,如下示例和1、2是一样的
fun methodSum(a: Int, b: Int) = a + b

三、变量

1、Kotlin中变量的声明和Java中不同,以var或val开始,然后是变量名,接着是冒号“:”,后面是变量类型。示例如下
val str : String = ""
var index : Int = 0
2、var和val的区别
var为可变变量,该变量可以再次被赋值
val为不可变变量,类似于Java中的final类型,只允许赋值一次。
3、和方法同理,如果不给变量设定类型,编译器会自动的将初始化数据的类型赋给该变量,如下面的name会自动设置类型为String
var name = "Tom"
4、对于String类型,kotlin增加了字符串模板的功能,可以在字符串中直接使用某个变量的值,而不需要Java字符串的拼接书写,如
var name = "Tom"
println("name is $name")
在字符串中使用$加上变量名,即可直接在字符串中显示该变量的值,类似于Java中的 "name is " + name;
字符串模板中还可以直接引用表达式,书写方式为 $ 加上大括号,大括号中为表达式内容。如 fun main(args: Array<String>) {
println("1 + 2 is ${methodSum(1,2)}")
}

四、类

1、类的声明以class为关键字,如
class Person {
var age = 0;
var name : String = ""
}
var变量将会自动生成get和set方法,val变量只会生成get方法
也可以将上面的类改为另一种声明方式
class Person(var age : Int = 0, var name : String = "")
效果是相同的,第二种写法更方便。
在Kotlin中直接使用person.age即可以自动调用相关的get或set方法,使用方式如下,会打印 age is 23
val person = Person()
person.age = 23
person.name = "Tom"
println("age is ${person.age}")
2、自定义get,set方法
class Person(var age : Int = 0, var name : String = "")
{
val isAdult : Boolean
get() = age > 18
}
上述示例中的isAdult就是自定义的get方法,取值时将根据age计算后返回。

五、枚举和“when”

1、枚举的声明
枚举的声明需要两个关键字 enum class 
Kotlin中枚举 enum是一个软关键字,只有在class前才是枚举的作用,其他场景可以当做普通的名称使用
同样的,枚举也可以声明变量和方法,在枚举常量和方法之间必须要加一个分号!! 示例如下
enum class Color(val r: Int, val g: Int, val b: Int) {
RED(255, 0, ), GREEN(0, 255, 0), BLUE(0, 0, 255);

fun rgb() = (r * 256 + g) * 256 + b
}
2、"when"的使用
when用于替换Java中的switch语句,其拥有更强大的功能。
when是一个拥有返回值的表达式,所以可以在方法中直接用等号"="连接,示例如下 fun getColorName(color: Color) =
when (color) {
Color.RED -> "Red"
Color.BLUE -> "Blue"
Color.GREEN -> "Green"
}由上方示例看出,when的分支之间不需要break来区分,某个分支匹配成功后,就结束该流程。
如果需要多个分支执行相同的流程,只需在判断条件处用逗号","分开即可
同时,when中可以使用任何对象,而不是Java中只能使用特定的对象,当然,when也可以不使用对象,示例如下
fun checkPerson(person : Person)
{
when
{
person.isAdult -> println("isAdult")
else -> println("age is ${person.age}")
}
}


六、"while"循环和"for"循环

1、"while"循环和"do-while"循环与java中的使用方式相同
2、"for"循环
Kotlin中的"for"循环使用了区间的概念,使用两个点".."来表示区间,如
val numbers = 1..10
numbers表示1到10之间的十个数字   另外".."也可以用于字符之间的区间表示,如'A'..'D'就是 ABCD
打印1到10的数字就可以用一下代码实现
fun pringNum()
{
for (i in numbers)
{
println(i)
}
}
“in”即表示在某个范围内取值。同时也存在相对应的 "!in"
另,还有由大到小的区间表达方式 downTo,设定每次更改值得步长step,及半闭合区间until(1 until 3  表示1,2,没有3)

七、异常和"try-catch"

1、和Java一样,异常的抛出用throw不同的是,Kotlin中的throw是一个表达式
2、Kotlin中不会强制要求捕获异常,比如使用IO流的IOException,可以不显式的捕获异常
3、try-catch-final的使用和Java基本一致,区别在于Kotlin中是一个表达式,如
fun readNumber(reader: BufferedReader) {
val number = try {
Integer.parseInt(reader.readLine())
} catch (e: NumberFormatException) {
null
}
println(number)
}
try或者catch的最后一个表达式将作为返回值

    //下一篇  新手上路,Kotlin学习笔记(二)---方法(函数)部分
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Kotlin