【教程】Kotlin语言学习笔记(四)——方法(持续更新)

文首标志
写在前面:
如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持!


【Kotlin语言学习】系列文章

第一章 《认识Kotlin》
第二章 《数据类型》
第三章 《数据容器》
第四章 《方法》


文章目录

  • 【Kotlin语言学习】系列文章
  • 一、方法声明
    • (一)普通类
    • (二)静态类
    • (三)伴生类
  • 二、方法参数
    • (一)默认参数
    • (二)具名参数
    • (三)可变参数


在 Kotlin 中,方法(Method) 是用于执行特定任务或操作的一段代码块,它可以包含在类中(成员方法)或者独立存在(扩展方法、顶层函数)。

一、方法声明

方法的声明包括方法名、参数列表、返回类型和方法体。下面是方法声明的语法。

fun 方法名称(参数1: 数据类型1, 参数2: 数据类型2, ...): 返回值数据类型 {// 方法体// 可以包含具体的代码逻辑
}

其中,fun是声明方法的关键字,用于声明这是一个方法;声明这是一个方法后,要填入此方法的参数并定义这些参数的数据类型;然后定义返回值的数据类型,最后设置方法体{}中的实现逻辑。

下面是一个简单的示例。

fun sum(a: Int, b: Int): Int {return a + b
}

在上面的示例中,sum 是方法名,它接受两个 Int 类型的参数 ab,并返回它们的和,返回类型为 Int

(一)普通类

普通类(Class) 是一种用于创建具有一组方法和属性的数据类型,它们可以被实例化为对象并用于存储数据和实现特定的功能。普通类可以包含构造函数、成员变量、成员函数和其他类型的嵌套类等成员。

普通类的方法通常是指成员方法,即定义在类中的方法。普通类的方法声明方式与其他方法相似,但它们是与特定类相关联的。下面是普通类的方法声明的基本语法结构。

class MyClass {fun 方法名(参数1: 数据类型1, 参数2: 数据类型2, ...): 返回值数据类型 {// 方法体// 可以包含具体的代码逻辑}
}

下面是一个简单的示例。

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

以上的代码创建了一个名为Person的普通类,并在这个类中创建了一个叫做test的成员方法,方法体的逻辑就是打印字符串“成员方法”。

需要注意的是,普通类必须创建出实例对象,才能够访问类的成员方法。

(二)静态类

Kotlin 并没有提供静态类的概念。相对地,Kotlin 在采用 Kotlin 单例模式时,使用了伴生对象来解决问题。

单例对象(Singleton Object) 是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点以获取该实例。在 Kotlin 中,实现单例模式非常简单,可以使用 object关键字创建单例对象。

而之所以强调“静态类”这个概念,就是因为在 Kotlin 中,通常将包含一组实用函数或工具方法的类命名为 UtilUtils 即工具类,这些类通常被用来存放各种通用的函数,方法或常量,方便在项目中重复使用——它们往往就是用类似静态类的概念创建一个单例对象,作为静态类。

下面是一个简单的示例。

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

以上的代码创建了一个单例对象(静态类)NumUtil,并在其中创建了一个名为double的方法,令输出结果为输入实参的2倍。

同普通类对比,调用静态类的静态方法不需要构建实例对象,直接通过类名就可以调用方法。

(三)伴生类

结合上面普通类和静态类调用方法的特点,如果想要在创建的是普通类的同时依旧希望直接通过类名来调用方法,就需要使用伴生类。

伴生类(Companion Class) 是一个与其所在的类绑定的内部类,可以通过类名直接访问其内部的成员,而不需要实例化外部类。伴生类常用于创建静态成员或工厂方法。其声明方法需要先创建一个普通类,再在普通类的块中使用companion object关键字创建伴生的对象,

fun main() {// 直接通过类名访问伴生对象中的方法Person.test2()
}// 伴生类
class Person() {// 伴生对象companion object {fun test2() {println("伴生类")}}
}

套用普通类的示例,仍然创建的是名为Person的类,但此时类中由于存在了伴生对象,所以成为了一个伴生类,于是可以像静态类一样通过类名直接访问方法。

二、方法参数

方法参数是用于接收输入值以在方法中进行处理的变量。这些参数可以是必需的参数,也可以是可选的参数,也可以是具有默认值的参数。

在Kotlin中,方法参数通常被分为三种类型:

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

(一)默认参数

默认参数 指的是对于某些方法参数,本身具有默认值,所以往往在声明中省略。

下面是一个简单的示例。

fun main() {// 默认参数greet("Alice") // 输出 "Hello, Alice!"greet("Bob", "Hey") // 输出 "Hey, Bob!"
}// 方法参数
fun greet(name: String, message: String = "Hello") {println("$message, $name!")
}

从以上的代码可以看到,不同于常规的方法声明,这里greet方法的message参数在确定数据类型为字符串后,使用了=赋值运算符设置了默认值为字符串Hello。此时在调用这个方法时,输入一个值自动识别为未定义默认值的name参数的实参;而只有两个实参都输入时,才能够修改默认参数的值。

(二)具名参数

具名参数 是指使用参数名称来传递参数值的一种方式,在调用函数或方法时可以根据参数名称来为参数赋值,而不必严格按照参数顺序传递参数值。

fun greet(name: String, message: String) {println("$message, $name!")
}
greet(name = "Alice", message = "Hello") // 输出 "Hello, Alice!"
greet("Bob", message = "Hey") // 输出 "Hey, Bob!"

仍旧使用默认参数的示例,可以从代码中看到在输入实参的时候,只需要使用参数 = 的方式就可以通过参数名定位方法中的具体参数进行赋值,此时即便有默认参数,也可以随意输入实参。

(三)可变参数

可变参数(varargs) 允许向方法传递可变数量的参数。通过vararg关键字,可以在方法声明中指定一个参数,该参数允许传递零个或多个值。

以下是简单的示例。

fun printNumbers(vararg numbers: Int) {for (number in numbers) {println(number)}
}// 使用可变参数进行调用
printNumbers(1, 2, 3, 4, 5)

上面代码创建了一个名为printNumbers的方法,相比于普通方法建立形参的方式,这里在numbers参数前使用了varag关键字表示此参数是一个可变参数。可变参数实际上是一组参数,所以可以在方法体中,建立一个for循环,遍历可变参数这个组中的所有参数,打印出传递的实参数字值。

上面代码并没有规定返回值类型,这就代表返回Unit类型(类似于其他语言的void类型)。

此外,当创建一个变量,而如果希望此变量可以直接传入可变参数作为实参,就可以使用展开运算符*将变量直接传入。

fun printNumbers(vararg numbers: Int) {for (number in numbers) {println(number)}
}fun main() {val arr = intArrayOf(1, 2, 3)// 使用展开运算符将数组元素作为参数传递给可变参数printNumbers(*arr)
}

需要注意的是如果可变参数不是最后一个参数,给后面的参数传递值需要使用具名参数的方法。


我是EC,一个永远在学习中的探索者,关注我,让我们一起进步!

文末标志

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/509878.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BioTech - 药物晶型预测与剂型设计 概述

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/136441046 药物晶型预测与剂型设计是指利用计算机模拟和优化药物分子在固态形式下的结构、性质和稳定性,以及与制剂工艺和质…

Android使用陀螺仪

Android使用陀螺仪 陀螺仪基础运用与理解 在Android应用中使用陀螺仪可以帮助实现各种功能,比如游戏控制、虚拟现实体验、运动追踪等。以下是使用Android陀螺仪的基本步骤: 获取传感器服务: 首先,需要获取设备上的陀螺仪传感器服…

新火种AI|AI商业中的里程碑事件已敲定! 欧盟27国一致通过《人工智能法案》。

作者:小岩 编辑:彩云 根据路透社2月2日消息,欧盟国家就《人工智能法案》立法正式达成协议。 此次立法的成功堪称AI商业领域上的里程碑事件。因为单从商业视角来看,这一法案的通过率先为欧盟内部的人工智能创新提供了明确的法律…

《精益DevOps》:填补IT服务交付的认知差距,实现高效可靠的客户期望满足

写在前面 在当今的商业环境中,IT服务交付已经成为企业成功的关键因素之一。然而,实现高效、可靠、安全且符合客户期望的IT服务交付却是一项艰巨的任务。这要求服务提供商不仅具备先进的技术能力,还需要拥有出色的组织协作、流程管理和态势感…

国内也可以直接采购谷歌与斯坦福联合开发的ALOHA 2双臂协作开源平台了

2024年 1 月,谷歌 DeepMind 联合斯坦福推出了 ALOHA 的增强版本 —ALOHA 2。与一代相比,ALOHA 2 具有更强的抓持性能、更符合人体工程学设计和更强的稳健性,并且在国内就可以直接采购,整套成本还不到 20 万元人民币。 可订购的套装…

数据可视化原理-腾讯-散点图

在做数据分析类的产品功能设计时,经常用到可视化方式,挖掘数据价值,表达数据的内在规律与特征展示给客户。 可是作为一个产品经理,(1)如果不能够掌握各类可视化图形的含义,就不知道哪类数据该用…

Linux 学习笔记(12)

十二、 系统服务 1 、系统服务分类,根据其使用的方法来分,可以被分为三类 a、由 init 控制的服务:基本都是系统级别的服务,运行级别这一章讲的就是这一类的服务 b、由 System V 启动脚本启动的服务:和我们打交道最多…

NOC2023软件创意编程(学而思赛道)python初中组复赛真题

目录 下载打印原文档做题: 软件创意编程 一、参赛范围 1.参赛组别:小学低年级组(1-3 年级)、小学高年级组(4-6 年级)、初中组。 2.参赛人数:1 人。 3.指导教师:1 人(可空缺)。 4.每人限参加 1 个赛项。 组别确定:以地方教育行政主管部门(教委、教育厅、教育局) 认…

【视频图像取证篇】Amped FIVE专业法医图像和视频增强软件之模糊图像去隔行功能

【视频图像取证篇】Amped FIVE专业法医图像和视频增强软件之模糊图像去隔行功能 法医图像和视频增强软件,专业又强大!!!超过 140 种过滤器和工具,用于分析、恢复和增强数字图像和视频。Amped FIVE能够稳定抖动的视频&…

速通C语言第十三站 预处理

系列文章目录 速通C语言系列 速通C语言第一站 一篇博客带你初识C语言 http://t.csdn.cn/N57xl 速通C语言第二站 一篇博客带你搞定分支循环 http://t.csdn.cn/Uwn7W 速通C语言第三站 一篇博客带你搞定函数 http://t.csdn.cn/bfrUM 速通C语言第四站 一篇博客带…

STM32 NAND FLASH知识点

1.NAND FLASH的简介 NAND FLASH 的概念是由东芝公司在 1989 年率先提出,它内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。 NAND FLASH 存储器具有容量较大,改写速度快等优点,适用于大量数据的存储&…

J17资本合伙人SKY LAI确认出席Hack .Summit() 2024区块链开发者盛会

J17资本合伙人SKY LAI确认出席由 Hack VC 主办,并由 AltLayer 和 Berachain 联合主办,与 SNZ 和数码港合作,由 Techub News 承办的Hack.Summit() 2024区块链开发者盛会。 J17资本合伙人SKY LAI负责管理公司的Web3基金,投资领域涵盖…