kotlin-1-基础语法

1,kotlin语音

kotlin是JetBrains 创造出的一门基于 JVM 的语言。所以,kotlin代码经过编译变成java字节码,这样才能在JVM上运行。

2,基本数据类型

kotlin是一门完全面向对象的编程语言,万物皆对象,函数都是对象,也没有基本数据类型,都继承自Any这个类,kotlin对这些数据类型提供了以下内置类型

类型字节数实例因为是对象,所以数据类型相互转换需要使用专门的转换函数,如
toByte()
toShort()
toInt()
toLong()
toFloat()
toDouble()
toChar()
Double64
Float32
Long64
Int32
Short16
Byte8

3,var和val

var是一个可变变量,可以通过重新分配类更改另一个值的变量,和java的变量声明一致。
val是一个只读变量,类似于java的final变量,一旦创建,必须初始化,且以后不能被修改。

var name = "hello ,kotlin "
 name="hello world ,kotlin "//√

val name = "hello"
name="hello java"//报错,不能再改了

4,修饰符作用域

public通java一致,全开放访问
private通java一致,只所在类可访问
protected通java一致,所在类及子类可访问,其他的不行
internalkotlin独有,同module可访问,其他不行

5,空安全

通过定义非空类型实现在编译期减少空指针异常
var message:String="hello,kotlin"
message=null    //编译出错

var message:String?="hello,kotlin"
message=null
print(message) //输出 null

同时,非空类型和可空类型不是同一个类型
var name1:String="kotlin"   非空类型
var name2:String?="kotlin"    可空类型
name1=name2    //编译出错
name1= name2.toString()    //✓
name2=name1                      //✓
name2=null
println(name2.length)    //编译不过
println(name?.length)    //为null则输出null,判断执行
println(name!!.length)    //强制执行,为null则报空指针

6,Elvis操作符

var a = if( b !=null ) b.length else 0
var a = b?.length ?:0
上面语句是等价的,但更推荐使用第二种方式
其实就是三目运算符的省略版 如果b不为null,返回b.length,否则为0

7,类型推断

var a=null   //a的类型为Nothing?
var name="name"         //自动推断为String

if(name is String ){
    print(name.length) //自动推断为String,可以使用String的各个方法
}


var name = null
var name2: String = name as String
print(name2)    //直接崩溃


var name = null
var name2 : String? = name as? String
print(name2) //输入null


使用 is 关键字进行类型判断
使用 as 进行类型转换,可能会抛异常
使用 as? 进行安全的类型转换

 8,if判断

if (表达式/lambda/方法) {
        print("hello , kotlin ")
    } else {
        print("hello ,it is wrong ")
}
与java一样

9,for循环

var arr = arrayOf(1, 2, 3, 4, 6, 8, 9)
    var list = arrayListOf(1, 2, 3, 4, 6, 8, 9)
    println(arr.javaClass.simpleName) // Integer[]  整型数组
    println(list.javaClass.simpleName)ArrayList 集合
    for (i in arr) {
        print(i)
    }
    println("")
    for (i in list) {
        print(i)
    }
    println()


    var range1 = 1..3
    var range2 = 1..10 step 2 //跨步 也就是间隔
    println(range1.javaClass.simpleName)//IntRange 整数区间

    for (i in 1..5) {// 1..5 双闭区间 必须前小后大  (1,2,3,4,5)
        print(i)
    }
    println()
    var range3 = 1 until 5
    for (i in range3) {//前闭后开 必须前小后大 (1,2,3,4)
        print(i)
    }
    println()

    var range4 = 9 downTo 1             //前后闭区间 必须前大后小 ,也可以加入间隔step
    println(range4.javaClass.simpleName)//IntProgression 序列
    for (i in range4) {
        print(i)//9 8 7 6 5 4 3 2 1
    }

10,when关键字

var a=3
    when(a){
        1 -> println("a==1")
        2 -> println("a==2")
        3 -> println("a==3")
        3 -> println("a==3")
        5 -> println("a==5")
        6 -> println("a==6")
    }

//输出 a==3 找到匹配后执行并退出

11,while及do while

 var a = 0
 while (a != 10) {//和java的一样,boolean表达式即可,也可以用break跳出循环 continue跳出单次循环
        println(a++)
 }

//先执行一遍,再判断条件 和java一样,也可以用break跳出循环 continue跳出单次循环
 var a = 0
 do {
    println(a++)
 } while (a != 10)



三种结构化跳转表达式:

return。默认从最直接包围它的函数或者匿名函数返回。
break。终止最直接包围它的循环。
continue。继续下一次最直接包围它的循环。     

12,函数

//无参无返回 返回其实是Unit
fun test() {

}
//有参无返回值
fun test(a: Int) {
    print("test a")
}

//有参且带默认值
fun test(a: Int, b: Int = 10) {
    print("test a b")
}

说明:当调用test(2)时,调用的是test(a: Int),这样就让带默认值的方法中的默认值无效了

//带个返回值
fun testhello(): String {
    return "hello"
}

//lamdba表达式
fun testLamdba(a: Int) = a + 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_Sun_01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值