Android kotlin学习——3.Kotlin方法

103 阅读3分钟

Kotlin方法

  • 方法声明
  • 方法参数
  • 方法用法

1.方法声明:

  • 普通类的方法
  • 静态类的方法
  • companion object 伴生类的方法

方法的组成: image.png

1.普通类的方法

fun main(){  
//普通类的成员方法声明与调用  
//需要先构建出实例对象,才能访问成员方法  
//实例对象的构建只需要在类名后面加上()  
Person().test()  
//打印:成员方法  
}  
  
class Person{  
   fun test(){  
       println("成员方法")  
    }  
}

2.静态类的方法

如果我们想要实现一个工具util的话,可以借助 关键字object 来创建一个静态类

fun main(){  
   // 静态类里面的方法。都是静态方法,
   //不需要构建实例对象,可以通过类名,直接访问静态方法
    val num2= NumUtil.double(1)  
    println(num2)  
    //打印:2  
}  
  
object NumUtil{  
    fun double(num:Int):Int{  
        return num*2  
     }  
}

3.cmpanion object 伴生类的方法

Kotlin中并没有static关键字,不过我们可以借助cmpanion object来实现类静态方法的目的(也就是想在普通类中声明的方法,希望不再需要构建实例对象,可以通过类名,直接访问静态方法)

fun main(){  
Person.test()  
//打印:成员方法  
}  
  
class Person{  
companion object{  
fun test(){  
println("成员方法")  
}  
}  
}

2.方法参数

  • 默认参数
  • 具名参数
  • 可变数量的参数

1.默认参数:

方法参数可以有默认值,当省略相应的参数时使用默认值。与其Java相比,这可以减少重载数量 我们可以通过类型后面的 = 来设置 默认值

fun read(offset:Int=0,start:Int){/*....*/}

2.具名参数:

如果一个默认值参数在一个无默认值的参数之前,那么无默认值的参数,只能通过使用具名参数调用该方法来使用:

fun read(offset:Int=0,start:Int){/*....*/}

//仅仅只给start传递值,使用默认值offset=0
read(start=1)

如果最后一个参数是方法,那么它既可以作为具名参数在括号内传入,也可以在括号外传入。

//Unit:action返回值类型
fun read(offset:Int=0,start:Int,action:()->Unit){/*....*/}

// 使用默认值 offset=0
read(start=1){println("hello")}

read(offset=1,start=1,action={println("hello")}

3.可变数量的参数(Varargs):

方法的参数(通常是最后一个)可以用vararg修饰符标记:

可变参数的要求:

  • 只有一个参数可以标注为vararg;
  • 如果vararg参数不是最后一个参数,可以使用具名参数语法,给后面的参数的传递值
fun main(){  

1.允许将可变数量的参数传递给方法
val append= append('1','2','3','4')  

println("append:${append}")  
//打印:append:1234  

2.将一个数组的内容传递给该方法,我们使用伸展(spread)操作符(在数组前面加*):
val world=charArrayOf('w','o','r','l','d')
val result=append('h','e','l','o','',*world)
println("result:${result}")  
//打印 result:hello world
}  
  
//vararg:传递不定常的参数  
fun append(vararg str:Char):String{  
val result=StringBuffer()  
for (char in str) {  
result.append(char)  
}  
return result.toString()  
}

补充:StringBuffer 是一个可变的字符串序列,它的作用是允许你对字符串进行动态的修改,而不需要创建新的字符串对象。与不可变的 String 类型不同,StringBuffer 支持在其内部进行插入、删除、追加等操作,而不会创建新的字符串实例。这对于需要频繁修改字符串内容的场景来说非常有用,因为避免了不断创建新的字符串对象所带来的性能开销。

主要的操作包括:

  1. 追加(Append): 将新的字符或字符串追加到现有的字符串缓冲区。
  2. 插入(Insert): 在指定位置插入字符或字符串。
  3. 删除(Delete): 从指定位置删除一定数量的字符。
  4. 反转(Reverse): 反转字符串缓冲区中的字符顺序。