方法的声明
-
普通方法的声明
比如我需要定义一个接收两个int类型参数,返回这两个参数的和,代码如下:
fun add(a:Int,b:Int):Int{
return a+b
}
定义方法构造和Java有区别,只需牢记就好
- 成员方法的定义与调用
class Test{
fun add(a:Int,b:Int):Int{
return a+b
}
}
调用:
Test().add(1,2)
-
静态方法的定义与使用
Kotlin给Java开发者带来最大改变之一就是废弃了static修饰符。与Java不同的是在Kotlin的类中不允许你声明静态成员或方法。相反,你必须向类中添加Companion对象来包装这些静态引用
定义:
class Test{
companion object{
fun add(a:Int,b:Int):Int{
return a+b
}
}
}
调用直接通过类名调用,这一点和Java一样,其中 companion object包裹的内容叫做类Test的伴生对象
Test.add(1,3)
-
静态类的定义
静态类通过object关键字来修饰,静态类里面的方法都是静态方法
object NumUtils{
fun double(a:Double):Double{
return a*a
}
}
调用也是一样,静态类名调用,NumUtils叫做单例。可以用@JvmStatic修饰符来将其中的成员变量或者方法指定为静态成员变量或者方法。
NumUtils.double(2)
-
单表达式方法
fun add(a:Int,b: Int):Int=a+b
该方法等价于
fun add(a:Int,b: Int):Int{
return a+b
}
-
方法带默认参数
如字面意思,方法带有默认参数,调用时可以省略有默认值的参数,与Java相比,可以减少方法的重载数量
例:
fun read(ArrayList<Char>,off:Int=1,len:Int=b.size){
//doSomeThings
}
调用时有三种方式
val b = arrayListOf('a', 'b', 'c')
read(b)
read(b, 0)
read(b, 2, 5)
相对于Java而言节省了参数为一个和两个时的重载方法。
-
方法参数可变
通过修饰符vararg可以表示接收多个同数据类型的参数
fun append(vararg chars:Char):String{
val str=StringBuffer()
chars.forEach {
str.append(it)
}
return str.toString()
}
调用:
println(append('h','e','l','l','o'))
-
局部方法
kotlin支持在方法内部定义方法,比如我在a方法内部定义方法b,那方法b的作用于仅局限于方法a内部。
fun margic():Int{
fun add(a:Int):Int{
return a+a
}
//生成0到100的随机数
val b=(0..100).random()
return add(b)
}
-
使用lambda表达式创建方法
lambda表达式的特点:
1、是匿名方法
2、是可以作为参数传递的
lambda表达式创建方法分为有参数的情况和无参数情况
- 无参数情况
格式:
var/val 变量名={操作的代码}
例如我们将下面这个方法改成lambda表达式:
fun test(){
println("无参数情况")
}
改成lambda表达式如下所示:
val test2 = { println("无参数情况") }
运行时使用变量名加括号就可以了
test2()
- 有参数情况
格式:
var/val 变量名:(参数类型,参数类型,...) -> 返回值类型={参数1,参数2,... -> 操作参数的代码}
在返回值类型可以自动推导的情况下可等价于:
val/var 变量名={参数1:类型,参数2:类型,... -> 操作参数的代码}
比如我们有以下一个简单求和的方法
fun test3(a:Int,b:Int):Int{
return a+b
}
改成lambda表达式如下
val test3:(Int,Int)->Int={a,b -> a+b}
也可等价于:
val test4={a:Int,b:Int -> a+b}
调用时也是直接变量名加括号就可以了。
网友评论