kotlin方法一般不能接受空值,硬加能接受空值 就必须加?

 

fun method(value : String ?){
println(value)
}
 
 
 var nums = 1..100表示1到100的数组
var nums1= 1 until 100 表示1到99的数组
for( a in nums step 2 ){
println(a)
}

显示13 579    step表示跳几个元素

 

 

nums.reversed()  表示翻转
var list = listOf("aaa","bbb","ccc")
for((i,e) in list.withIndex()){  //带下表的增强遍历数组
println("$i $e")
}

 

 

声明方法的一行写法

fun addValue(x:Int ,y:Int):Int = x+y

 

还有一种函数表达式的写法

var i= {x:Int,y:Int->x+y}
var result = i(3,5)
var j:(Int,Int)->Int ={x,y->x+y}
var result1 = j(3,5)

 

 

具名参数用法

val Pi= 3.14159f

fun 获取圆的周长(PI:Float=Pi,半径:Float){
return  2*PI*半径
}

PI在还没被调用的时候就被赋值了,叫默认参数

如果调用的时候不填,默认就是 3.14159f

 

在明知道PI的值的时候,可以只赋值半径

但是var area=获取圆的周长(2.0f)

这样是会报错的

正确写法是var area=获取圆的周长(半径=2.0f)

    这就叫具名参数

 

 

类要被继承  必须前面加open

方法允许被重写也要加关键字open

 

例如 open class Father{
var chactor ="内向"
open fun action(){
println("啦啦啦啦啦")
}
}
 
class Son :Father(){
 
override  fun action(){
println("儿子说话了")
}
}
 
fun main(args :Array<String>){
var son1= Son()
println("儿子在${son1.chactor)}")
son1.action()
}

 

抽象类的定义和java一样 方法也要抽象

 

abstract class Human(var name: String){
abstract fun eat()
}

接口是事物的能力

抽象类反应事物的本质

interface    IMan {
fun xiaodidi()
}
abstract class Human{
abstract   fun eat(){}
}
class  Man : Human(),IMan{
override fun xiaodidi(){
println("dasdasdasd")
}
override fun eat(){
println("dasdasdasda")
}
}

 

继承要带括号   实现不需要

 

代理
interface IWashing{
fun washing()
}
class son :IWashing {
override fun washing(){
println("儿子洗碗")
}
}
 class Father :IWashing by Son(){
override fun washing(){
println("爸爸开始洗碗")
Son().washing()
println("儿子替爸爸把碗洗好了")
}
}

通过by 来让别人代理自己做事

 

单例设计模式

只要把class 换成object就行,如果是单例 引用的时候就不需要加括号

 

object son :IWashing {
override fun washing(){
println("儿子洗碗")
}
}
 class Father :IWashing by Son{
override fun washing(){
println("爸爸开始洗碗")
Son.washing()
println("儿子替爸爸把碗洗好了")
}
}

 

 

枚举

enum class Week{

星期一,星期二,星期三,星期四,星期五

}

印章类

sealed class Son{
fun sayHello(){
println("大家好!")
}
class xiaoA():Son()
class xiaoB():Son()
}

 

 

fun main(args:Array<String>){
var s: Son= Son.xiaoA()
var v:Son= Son.xiaoB()
var d:Son = Son.xiaoA()
var list = listOf<Son>{s,v,d}
for(q in list){
if(q is Son.xiaoA){
q.sayHello()}
}
}

 

is  相当于 java的instanceof

 

kotlin中的单利


class MyApplication private constructor() : Application() {
  companion object {
     val instance :MyApplication by lazy{ 
       MyApplication()
     }
  }
}


private constructor~私有话构造方法,禁止手动创建对象; 
companion object~伴生对象,每个类都可以实现一个伴生对象,它是该类的所有实例共有的对象。它将类似于Java中的静态字段; 
by lazy~懒加载, 可以在我们使用这个对象时再对其创建。