/** * kotlin 的方法有三种 * */ fun main() { /** * 方法一 * 1.普通类的成员方法申明与调用 * (1)需要先构建出实例对象,才能访问成员方法 * (2)实例对象的构建只需要在类名后面加上() * */ Person().test() /** * 方法二:静态类里的方法都是静态方法 * 静态类里的方法都是静态方法 * 不需要构建出实例对象,可以通过类名直接访问静态方法 * */ val num = NumberUtil.double(2) println("num=$num") /** * 方法三:当我们想在一个普通类,也就是class声明的类里面。想要定义一个静态方法的话 * 不需要构建实例对象,可以通过类名,直接访问静态方法 * */ Person.test2() read(1,2) read(start = 2) read2(1,2, action = { //方法体的最后一行就是方法的返回值 val result=1*2 "括号内传递参数 read2" }) read2(start = 1){ "括号外传递参数 read2" } val append:String= append('1','2','3','4') println("append:$append") /** * 当我们调用vararg方法时,我们可以一个接一个地传参,例如append('1,','2','r','d'), * 或者如果我们已经有一个数组并且希望将其所有内容传给该方法,我们使用延展(sread)操作符(在数组前面加*): * */ val world= charArrayOf('1','2','r','d') val result= append('h','e','l','l','o',*world) println("sread_result:$result") } //普通类 class Person { //方法一 fun test() { println("成员方法") } //方法二 companion object { fun test2(){ println("伴生类") } } } /** * object修饰的类都是静态类 * */ object NumberUtil { //方法三 fun double(num: Int): Int { return num * 2 } } /** * 方法中的参数 * 参数类型 * 1.默认参数 * 2.具名参数:指定参数名称 * 3.可变参数 * 如果一个默认参数在一个默认值的参数之前,那么无默认值的参数,只能通过使用具明参数调用该方法来使用 * 如:read(start=1) 仅仅只给start传值,使用默认值offset=0 * */ fun read(offset:Int=0,start:Int){ println("offset:$offset start=$start") } /** * * 如果最后一个参数是方法,那么它既可以作为具名参数在括号内传入,也可以在括号内传入 * 第三个参数action:是一个方法 * 如果参数的类型是(),说明它是一个方法,如action:() * 方法参数的返回值使用->:如果不需要返回值,使用Unit;如果需要放回Int,就使用Int,其他都这样类似 * * 可变参数的要求 * 只有一个参数可以标注为vararg * 如果vararg参数不是最后一个参数,可以使用具名参数语法,给后面的参数的传递值 * */ fun read2(offset:Int=0,start:Int,action:()->String){ val ret=action() println("offset:$offset start=$start ret:$ret") } /** * 可变数量的参数 * 方法的参数(通常是最后一个)可以用vararg修饰标记 * */ fun append(vararg str:Char):String{ val result = StringBuffer() for (char in str){ result.append(char) } return result.toString() }