Kotlin系列篇--Kotlin基础

第二部分:Kotlin基础

前言:这一章我们将学习Kotlin基本要素:变量、函数和类;Kotlin中的控制结构;智能转换;Kotlin把类型检查和转换合并成一次操作,最后我们会学习异常。


目录

第二部分:Kotlin基础

 

一、函数和变量

二、类和属性:

三、枚举类型:

四、when处理枚举类型:

五、智能转换:合并类型检查和转换

六、异常:


一、函数和变量

函数:

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

可见,函数声明是由fun关键字开始,其后就是函数名,括号内是参数列表,冒号后面是返回值。在Kotlin中if语句是有结果的表达式,而Java中if是语句,没有返回结果,类似于Java中(a>b?a:b),以上函数还可以更简单:

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

val和var:不可变类型和可变类型:

  • val:相当于Java中final变量
  • var:相当于Java中非final变量

注意:虽然val引用自身是不可改变的,但是他指向的对象是可以改变的:

val languages = arrayListOf("java")
languages.add("Kotlin")

二、类和属性:

在Kotlin中public是默认可见性

class Person(var name:String,val age:Int?=null)

基本上在你声明的时候就已经自动生成了访问器(只读为getter,可读可写为getter/setter)

自定义访问器:

class Rectangle(var width:Int,var height:Int){
    val issquare:Boolean 
        get() {
        return width==height
    }
}

三、枚举类型:

//简单枚举类型
enum class Season{
    SPRING,SUMMER,AUTUMN,WINTER
}
//带属性的枚举类型
enum class Season2(val temp:Int){
    SPRING(10),SUMMER(30),AUTUMN(20),WINTER(-10)
}
//带方法的枚举类型
enum class Season3{
    SPRING{
        override fun getSeason(): Season3 = SPRING
    },
    SUMMER{
        override fun getSeason(): Season3 = SUMMER
    },
    AUTUMN{
        override fun getSeason(): Season3 = AUTUMN
    },
    WINTER{
        override fun getSeason(): Season3 = WINTER
    };
    abstract fun getSeason():Season3
}

fun main(args: Array<String>) {
    val season = Season.values()
    season.forEach { season:Season -> println(season) }
}

四、when处理枚举类型:

fun getSeason(season: Season) = 
        when (season){
            Season.SPRING -> "spring"
            Season.SUMMER -> "sunmer"
            Season.AUTUMN -> "autumn"
            Season.WINTER -> "winter"
        }

注意:在when中可以使用任意对象,比Java中switch语句强大得多,when还可以不带参数:

fun getSeason(season: Season) =
        when {
            season==Season.SPRING -> "spring"
            season==Season.SUMMER -> "sunmer"
            season==Season.AUTUMN -> "autumn"
            season==Season.WINTER -> "winter"
            else -> throw Exception("other")
        }

五、智能转换:合并类型检查和转换

例如计算(1+2)+4,把他们储存在一个树状结构中,叶子为Num类型,节点为Sum类型,Sum和Num同时实现一个接口Expr,此接口的唯一目的就是提供公共类型

fun eval(e:Expr):Int{
    if (e is Num){
        val n = e as Num
        return n.value
    }
    if (e is Sum){
        val sum = e as Sum
        return eval(sum.left)+ eval(sum.right)
    }
    throw Exception("ex")
}

用when重构上述代码:

fun eval2(e: Expr):Int = 
        when(e){
            is Num -> e.value
            is Sum -> eval2(e.left)+ eval2(e.right)
            else -> throw Exception("ex")
        }

六、异常:

和Java不同的是,Kotlin中不必使用new关键字来创建异常实例,同时Kotlin中throw是一个表达式,有返回值:

var num = 50
val result = 
        if (num in 1..100){
            num
        }else{
            throw Exception("exception")
        }
  • kotlin中的异常处理和java处理相似,除了Kotlin不要求你声明函数可以抛出的异常。
  • 如果一个try代码块执行一切正常,代码块中最后一个表达式就是结果。
  • 如果捕获到一个异常,那么cache代码块中最后一个表达式就是结果。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值