kotlin01_基础知识语法

  1. 在java中,我们在声明一个变量时,需要将变量类型放在变量名前面,而kotlin正好相反,变量名在前,变量类型在后。
// java 
String a= "i ma java"

// kotlin 
val a: String ="i am kotlin"

增强的类型推到。

编译器可以在不知道显示声明的基础类型下,自动推到出它所需要的类型。

val string="i am Kotlin"
val int =0
val float=1.0f
val long=1314L
val double=5.12

类型转换

只能进行强转换

val e: Int=10
val f:Long=e.toLong()

val 和var 的使用规则。

  1. 如果说var代表了varible,那么val代表的是value的缩写。但是这样表述不准确,而是把val解释成final+ varible,即通过val声明的变量具有java中final关键字的效果。也就是引用不可变。
  2. val的含义:引用不可变。个人认为:和java中的final关键字类似,保证内存地址不变,但是对象内容是可以变的。
class Book(var name:String){
    fun printName(){
        println(this.name)
    }
}
fun main(args:Array<String>){
    val book=Book("thinking in java")
    book.name="Diviing into Kotlin"
    book.printName()
}

字符串的比较

  1. "=="比较的是内容
  2. "==="比较的是引用

方法和成员变量的引用

通过两个冒号::来实现对于某个类的方法进行引用,加入我们有一个CountryTest类的对象实例,countryTest,如果要引用他的isBigEuropeanCuountry方法:

countryTest::isBigEuropeanCountry

when表达式和for循环和范围表达式

fun schedule(cunny:boolean,day:Day)=when (day){
    DAY>SAT->basketball()
    DAY->SUN->fishing()
    DAY.FRI->appointment()
    else->when{
        sunny->library()
        else->study();
    }
}

表达式的具体语法

  1. 一个完整的when表达式类似switch语句,由when关键字开始,用花括号包含多个分支,每个分支有->链接。一直匹配完为止,否则执行else分支的内容。

for 循环和范围表达式。

for(i:int in 1…10){
println(i)
}

  1. in 1…10 是范围表达式,表述出范围

function类型和invoke方法

fun foo(int:Int){
    print(int)
}
fun main(){
    listOf(1,2,3).forEach{foo(it)}
}

其java的反编译代码为:

public static final Function0 foo(final int var0){
    return (Functino0)(new function0(){
    public Object invoke(){
        this.invoke();
        return Unit.INSTANCE;
    }
    public final void invoke(){
        int var1=var0;
        sout(var1);
    }
});

Kotlin在JVM层设计了function类型(Function0,Function1,Function2,Function…Function22)来兼容java的lambda表达式,其中后缀数字代表了lambda参数的数量.

invoke方法

在上面代码中,foo函数的返回值类型是Function0,这就意味着,我们调用了foo(n),那么实际上是构造了一个function对象,这个对象并不等价与我们要调用的过程本身,需要调用Functin0的invoke方法才能执行println方法。
因此可以改以上代码为:

fun main(){
    listOf(1,2,3).forEach{foo(it).invoke()}
}

或者

fun main(){
    listOf(1,2,3).forEach{foo(it).()}
}

非空判断

  • 安全的调用:?.,
  • Elvis操作符 类似于java的?
double result=student.glasses!=null?student.glass.degree:-1
val result=student.glasses?.degreeOfMyopia?:-1
  • 非空断言!!.
    在java中,用Assert来保证某个变量不为空,Kotlin中,提供!!.
fun main(args:Array<String>){
    var b1:Boolean=true
    
}

插入到字符串中:"${b1}代表真"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值