写在前面:
如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持!
【Kotlin语言学习】系列文章
第一章 《认识Kotlin》
第二章 《数据类型》
第三章 《数据容器》
第四章 《方法》
文章目录
- 【Kotlin语言学习】系列文章
- 一、方法声明
- (一)普通类
- (二)静态类
- (三)伴生类
- 二、方法参数
- (一)默认参数
- (二)具名参数
- (三)可变参数
在 Kotlin 中,方法(Method) 是用于执行特定任务或操作的一段代码块,它可以包含在类中(成员方法)或者独立存在(扩展方法、顶层函数)。
一、方法声明
方法的声明包括方法名、参数列表、返回类型和方法体。下面是方法声明的语法。
fun 方法名称(参数1: 数据类型1, 参数2: 数据类型2, ...): 返回值数据类型 {
// 方法体
// 可以包含具体的代码逻辑
}
其中,fun
是声明方法的关键字,用于声明这是一个方法;声明这是一个方法后,要填入此方法的参数并定义这些参数的数据类型;然后定义返回值的数据类型,最后设置方法体{}
中的实现逻辑。
下面是一个简单的示例。
fun sum(a: Int, b: Int): Int {
return a + b
}
在上面的示例中,sum
是方法名,它接受两个 Int
类型的参数 a
和 b
,并返回它们的和,返回类型为 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 中,通常将包含一组实用函数或工具方法的类命名为 Util 或 Utils 即工具类,这些类通常被用来存放各种通用的函数,方法或常量,方便在项目中重复使用——它们往往就是用类似静态类的概念创建一个单例对象,作为静态类。
下面是一个简单的示例。
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,一个永远在学习中的探索者,关注我,让我们一起进步!