/*** 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() }