Kotlin 学习-方法和参数类型

复制代码
/**
 * 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()
}
相关推荐
apple-mapping15 小时前
网络RTK定位学习总结
学习·网络rtk
楚山之石16 小时前
【Lancet Neurology 】多发性硬化认知障碍的 SDMT 筛查、灰质萎缩标志与认知康复循证路径
图像处理·人工智能·学习·mri
海海不掉头发17 小时前
CSDN博客_时序预测9模型复现对比
人工智能·学习·软件工程
拥小抱19 小时前
Compose 知识点
android
文章永久免费只为良心19 小时前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南
AIsoft_868919 小时前
学术讲座录音如何整理?录音APP可行吗
android·iphone
蓝祁子yoky19 小时前
Qt学习日记 Day13:网络编程(一)-TCP基础与Socket实战
网络·qt·学习
架构师伯子明20 小时前
Ros 学习十三:IK Demo
学习
小羊没烦恼!20 小时前
关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁
java·服务器·网络·学习·负载均衡
幼儿园蛋小黄21 小时前
从 STM32N647 的 AI 部署入门嵌入式:一条可落地的学习路线
人工智能·stm32·学习