Kotlin-入门基础

 

Kotlin这门语言的设计哲学是务实、简洁、安全、互操作性。而且是跨平台的,可以作为Android平台的开发语音,也可以开发后台等等。

首先,国际惯例,先来个“Hello World”程序来了解下kotlin。

fun main(args: Array<String>) {
    println("Hello World")
}

从这一段代码中你能了解Kotlin的哪些信息呢?和Java语言有什么不同?
1、首先是方法已fun 开头
2、参数在前,类型在后,中间以 : 隔开
3、语句结束不需要以 ; 结尾
4、函数不需要定义在类里面

大家可以在在线kotlin编译网站(http://try.kotl.in)直接书写Kotlin代码来进行练习

基本数据类型

Kotlin中的类型是弱类型,使用var定义可读变量,使用val定义只读变量,val变量虽然是只读的但并不等于Java中的常量,这个大家可以通过 Tools-Kotlin-Show Kotlin Bytecode的Decompile来查看编译之后的代码来了解其区别。

val在初始化后是不可以改变其值的,但是其指向的对象属性是可以改变其属性值的。
 

fun main(args: Array<String>) {
  
    val value: Int = 5
    value = 8 // 此时value在编译的时候就会报错了
    val p: Person = Person("lisi", 20)
    p.name = "wangwu"//属性值可以更改,因为属性是var的
    
}

class Person(var name: String, var age: Int)

Kotlin中的基本数据类型有以下几种:

kotlinjava
Doubledouble
Floatfloat
Longlong
Intint
Shortshort
Booleanboolean


这里我们看到kotlin的类型和Java中的装箱类型是一样的,但是咋Kotlin中是没有装箱类型的,只有基本数据类型,

val numd:Double = 3.0
val numf:Float = 3.0f
val numl:Long = 3L
val numi:Int = 5
val nums:Short = 2
val numb:Boolean = true

在kotlin中类型转换必须要显示转换 如:Int类型赋值给Long类型

    val numi:Int = 5
    val numl:Long = numi.toLong()


字符串模板

在kotlin中字符串模板使用 $ 来表示

    for (i in 1..50) {
        println("我是第 $i 个数据")
        println("我是第 ${i+1} 个数据")
        println("我是第 $i \"个数据\" ")
        println("我是第 $$i 个数据")
    }

1、直接在变量前面加 $ 符号
2、如需表示表达式 则使用${} 表示
3、如需使用 "" 则使用 \ 作为转义
4、如需使用$  则在前面直接在加一个 $ 符号

区间与循环

在Kotlin中没有Java中的for循环 定义变量 变量++ 知道结束,在Kotlin中使用区间来代替简单的循环 使用  .. 来表示  比如 1..100 表示1到100的闭区间 , 1 until 100 表示1到100的开区间  100 downto 1 表示100到1每次减1  100 downto 1 step 2 表示100到1每次减2 等等

    for (i in 1..100) {
        println(i)
    }
    //1 2 3 ...... 100

    for (i in 1..100 step 2) {
        println(i)
    }
    //1 3 5 ...... 99 

    for (i in 1 until 100) {
        println(i)
    }
    //1 2 3 ...... 99

    for (i in 100 downTo 1) {
        println(i)
    }
    //100 99 98 ...... 1

    for (i in 100 downTo 1 step 2) {
        println(i)
    }
    //100 98 96 ...... 2
    //当condition为true是执行条件语句
    while (condition){

    }
    
    
    //首先无条件执行一次do语句 然后当condition为true是执行条件语句
    do {
        
    } while (condition){
        
    }

when语句

在Java中当我们需要满足某一个条件时执行代码通常使用 switch,但在kotlin中是没有switch的取而代之的则是 when语句,when语句比switch更强大,switch只支持基本类型 但是when 语句不仅仅支持基本类型 还支持表达式或者对象

    for (i in 0..5) {
        when (i) {
            0 -> println(i)
            1 -> println(i)
            2 -> println(i)
            3 -> println(i)
            else -> throw RuntimeException("未有匹配数据")
        }
    }


智能转换

Kotlin中使用 is关键字代替Java中的 instanceof关键字  当使用了is 判断是某个类型后 则可以直接把其当做这个类型来使用 因为编译器已经将其智能转换了  当然你可以可以使用 as 关键字来将其显示的转换


fun main(args: Array<String>) {

    val p: Person = Man()
    if (p is Man) {
        println(p.getManName()) //可以直接调用Man中的方法
    }

    val pw: Person = Woman()
    if (pw is Woman) {
        println((pw as Woman).getManName()) //可以通过as手动转换 但是编译器会提示灰色的"no cast needed"
    }
}


interface Person

class Man() : Person {
    fun getManName(): String {
        return "xioaming"
    }

}

class Woman() : Person {
    fun getManName(): String {
        return "xiaohong"
    }
}

null安全

Kotin和Java的类型系统之间第一条也可能是最重要的一条区别是, Kotin对可空类型是显式的支持。这样可以明确的表示那个变量可以为null 那个不可以为null 可以有效的避免空指针异常(NullPointException)

安全调用运算符:?.    其允许你将一次null判断和调用 合并在一起使用

fun main(args: Array<String>) {

    getStrLength(null) //打印null
    getStrLength("hello") //打印 5

}

fun getStrLength(str: String?) {
    println(str?.length)
}

参数类型String后面的?表示其可以为null  当传入null时则直接返回null 执行中断 不会执行.length方法 避免空指针异常

Elvis运算符:?:    这个操作符有点类似Java的三元运算符 

fun main(args: Array<String>) {

    println(getStrLength(null)) //打印 0
    println(getStrLength("hello")) //打印 5

}

fun getStrLength(str: String?): Int {
    return str?.length ?: 0 //当str为null时str?.length返回null与返回值Int类型不匹配,?: 表示当str?.length为null时则返回0
}

安全转换:as?   安全的类型转换 如果不可以转换则直接返回null 避免Clas sCastException异常

    val person: Person = Man()
    (person as? Man)?.getManName() //如果person可以转换为Man 则调用getManName()方法,否则 (person as? Man)返回null

非空断言:!!  表示对常量强制使用,不管其是否为null 直接调用,这有可能抛出空指针异常,所以尽量少用

    val person: Person = Man()
    (person as? Man)!!.getManName() 
    //当(person as? Man)类型转换不匹配时 则返回null 此时加!! 表示强制调用getManName()方法,这就有可能出现空指针异常

扫一扫 关注公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值