kotlin学习(一)

kotlin基础部分

函数和变量

fun main(args : Array<String>){
    println("Hello Kotlin!");
}

以上两行简短的代码可以看到

  • 声明一个函数需要使用关键词fun
  • 参数类型要写在参数后面
  • 函数可以单独存在而不需要在class里面

函数
对于没有返回值的函数,直接使用fun关键词即可;
对于有返回值的函数,在参数列表之后声明返回值类型

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

块主体
如果一个函数拥有大括号,则说这个函数拥有一个块主体
表达式主体
内容部分仅仅由一个表达式组成,可以移除大括号和return声明,使用整个表达式作为函数的主体

fun max(a : Int , b : Int) : Int = return if(a > b) a else b

在这里返回类型也可以省略
原因:对于表达式主体函数来说,编译器能够分析主函数主体的表达式,并使用表达式的类型作为函数返回类型。称为类型推断
<注意>只有表达式函数才能省略返回值

变量
使用var表示变量,一个可变的引用
使用val表示常量,不可变的引用(对应Java中的final变量)

var answer = 42
var answer : Int = 42
val answer = 42
val answer : Int = 42

尽管var关键字允许一个变量改变自己的值,但是类型是固定的,编译器仅仅从初始化的类型推断类型变量
一个val变量必须在定义块执行时被初始化且只能被执行一次

字符串模板
在字符串中通过$字符来引用局部变量,而且表达式是静态检查的,如果去应用一个不存在的变量,代码不会通过编译

class Person(var name : String)
仅仅一行,就代替了Java中繁琐的构造函数和get/set方法

在kotlin中,public是默认的可见性

属性
对于Java中的访问权限,在kotlin中通过val和var实现
一个声明为val的属性是只读的,一个声明为var的属性是易变的和可被改变的

class Person(
    val name : String,
    var isMarried : Boolean
)

枚举和when

enum class Color{
    RED,ORANGE,YELLOW   
}

可以看出来声明一个枚举类需要使用enum class关键词声明,其中enum又叫做软关键词,放在class之前有特殊含义

enum class Color(val r : Int , val g : Int , val b : Int){
    RED(255,0,0),
    ORANGE(255,265,0),
    YELLOW(255,255,0);//注意这里必须有分号,因为要和函数隔开
    fun rgb() = (r * 256 + g) * 256 + b
}

when对应于Java中的switch语法

fun getWhen(color : Color) = when(color){
    Color.RED -> "red"
    Color.GREEN,Color.BLUE -> "other
}

可以看出,每一行对应于Java中switch以及break
对于多个组合,通过逗号连接
when更强的地方在于它的参数允许任意的对象

智能类型转换:合并类型检查和转换
kotlin·通过is检查一个变量是否为一个指定的类型,通过as进行显示类型转换
在Java中,类型检查之后,如果要使用特定类型访问该变量,则需要进行强制类型转换
在kotlin中,类型检查之后,后续不需要执行类型转换(实际上编译器执行了类型转换),这叫做智能类型转换
当且仅当一个变量在is检查之后不再改变时,智能类型转换才会起作用

while和for循环
while和do-while循环和Java中类似
遍历数字:通过起始值和结束值来操作,中间使用..间隔

var oneToTen = 1..10//闭区间
for (i in 0 until size)//从0打印到size-1

for循环只有for-each模式

for (i in 100 downTo 1 step 2)//从100每次减2直到1

也可以使用in操作符检查一个值是否在某个范围内

遍历映射集

val binaryReps = TreeMap<Char,String>()
for (c in 'A' .. 'F'){
    val binary = Integer.toBinaryString(c.toInt())
    binaryReps[c] = binary
}
for ((key , value) in binaryReps)//拆箱
    println("$key = $value")

异常处理
kotlin没有区分已检查异常和未检查异常,并且没有throws从句在代码中体现

fun readNumber(reader : BufferedReader) : Int ? {
    try{
        val line = reader.readLine()
        return Integer.parseInt(line)
    }
    catch(e : NumberFormatException){
        return null
    }
    finally{
        reader.close()
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值