变量与常量
常量:
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表达式
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)
}
参考文章: