常量:
val=value,值类型,类似Java的final,不可以重复赋值。
变量:
var=variable
类型推导就是编译器可以推导量的类型
package com.example.n val FINAL_HELLO_WORLD:String="Helloworld" var helloworld:String="HelloWorld" //类型推导 val FINAL_HELLO_CHINA="hellochina" fun main(args:Array<String>) { helloworld="hiworld"//可以重新赋值 }
以特定功能组织起来的代码块:
package com.example.n fun main(args:Array<String>) { val arg1=args[0].toInt() val arg2=args[1].toInt() println("$arg1+$arg2=${sum(arg1,arg2)}") } //fun sum(arg1:Int,arg2:Int):Int{ // return arg1+arg2 //} fun sum(arg1:Int,arg2:Int)=arg1+arg2;
Lambda表达式就是匿名函数
遍历:
args.forEach { println(it) } args.forEach (::println )Lambda表达式的简化:
函数调用最后一个Lambda可以移出去
函数参数只有一个Lambda,调用时小括号可以省略
Lambda只有一个参数时可以默认为it
入参,返回值和形参一致的函数可以用函数引用的方法作为实参传入
类成员包括属性和方法
属性的初始化尽量在构造方法中完成
无法在构造函数中初始化,尝试降级为局部变量
var 用lateinit延迟初始化,val用lazy
可空类型谨慎使用null直接初始化
val修饰的属性相当于只读变量必须初始化
class A{ var b=0 get(){ println("someone tries to get b") return field } set(value){ println("some one tries to set b") field=value } }
Java中没有而Kotlin中有的运算符
1.in
a in b ----> b.contains(a)
a!in b ------>!b.contains(a)
2.is
用于检查对象是否是某个类的实例,相当于Java中的instanceof运算符。
Kotlin和Java相同的运算符:
Kotlin与Java使用有差异的运算符
1.==和!=
==比较的式值,===才是比较对象
2.[]
与Java不同,Kotlin的这个运算符不仅可以用在数组变量后,也可以用在集合变量后,可以方便地调用和操作数组和集合中的元素。
Java中有而Kotlin没有的运算符
Kotlin中抛弃了类c风格的运算符,只是定义了几个函数
运算符重载:
任意类可以定义或者重载父类的基本运算符通过运算符对应的具名函数来定义对参数个数做要求,对参数和返回值类型不做要求不能定义任意运算符中缀表达式:
只有一个参数,而且用infix修饰的函数
不需要用.()的方式来调用
运算符+重载的栗子:
package com.example.n class Complex(var real:Double,var imaginary:Double) { operator fun plus(other: Complex): Complex { return Complex(real + other.real, imaginary + other.imaginary) } override fun toString(): String { return "$real+${imaginary}i" } } fun main(args:Array<String>) { val c1=Complex(3.0,4.0) val c2=Complex(2.0,7.5) println(c1+c2) }
参考文章:
https://www.jianshu.com/p/e9b5d263615d