funmain(args: Array<String>) { println(sum(1, 2, 3, 4, 5, 6 , 7 , 8 , 9 , 10 , 556 , 48 )) } funsum(vararg nums: Int): Int { var result = 0 for (num in nums) { result += num } return result }
4. 循环
1
> 在Kotlin中,循环可以使用`for`或`while`关键字来声明。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
funmain(args: Array<String>) { for (i in0 until 10) { println(i) } for (i in0..9) { println(i) } for (i in0 until 10 step 2) { println(i) } for (i in9 downTo 0) { println(i) } while (i < 10) { println(i) i++ } }
funmain(args: Array<String>) { val person = Person() val student = Student("张三", 18).sayHello() person.name = "张三" person.age = 18 person.sayHello() } classPerson{ var name: String = "" var age: Int = 0 funsayHello() { println("Hello, my name is $name, I am $age years old.") } } // 构造函数 classStudent(name: String, var age: Int = 0){ var name: String = name.trim() // 去掉字符串首尾的空格 funsayHello() { println("Hello, my name is $name, I am $age years old. I am a student.") } }
// 初始化块,初始化块用 init 关键字声明,属于类的一部分,每创建一个类的实例,所有初始化块都会执行。 // Kotlin 次构造函数必须先调用主构造函数,因此 init 块一定会在所有次构造函数逻辑前执行; classStudent(name: String, var age: Int = 0){ var name: String = name.trim() // 去掉字符串首尾的空格 init { // lowercase().startsWith("a")先把字符串转为小写,再判断是否以指定前缀开头,适用于「不区分大小写的前缀匹配」场景 if(name.lowercase().startsWith("a")){ this.name = name }else{ this.name = "User" println("Name is not start with A, add User prefix.") } } funsayHello() { println("Hello, my name is $name, I am $age years old. I am a student.") } }
//辅助构造函数 //辅助构造函数用 constructor 关键字声明(无 fun),核心规则: //一个类可以有多个辅助构造函数(重载); //所有辅助构造函数必须直接 / 间接调用主构造函数(通过 this()); //辅助构造函数的逻辑执行在 init 块之后。 classStudent(name: String, var age: Int = 0){ var name: String = name.trim() // 去掉字符串首尾的空格 init { // lowercase().startsWith("a")先把字符串转为小写,再判断是否以指定前缀开头,适用于「不区分大小写的前缀匹配」场景 if(name.lowercase().startsWith("a")){ this.name = name }else{ this.name = "User" println("Name is not start with A, add User prefix.") } } constructor(name: String) : this(name, 0) { // 辅助构造函数中可以调用其他构造函数,这里调用主构造函数 this(name, 0) } funsayHello() { println("Hello, my name is $name, I am $age years old. I am a student.") } }
//getter和setter //Kotlin 中,类的属性可以使用 var 或 val 关键字来声明。 //var 关键字声明的属性可以读写,val 关键字声明的属性只能读。 //Kotlin 中,属性的读写逻辑可以自定义,这就需要使用到 get 和 set 方法。 //get 方法用于读取属性值,set 方法用于写入属性值。 //get 方法默认返回属性值,set 方法默认接收一个参数,参数为属性值。 //可以在属性声明中自定义 get 和 set 方法,这就需要使用到 get 和 set 关键字。 //getter和setter方法都是隐式的,不需要手动实现。 classStudent(name: String, var age: Int = 0){ var name: String = name.trim() // 去掉字符串首尾的空格 get() { return field } set(value) { field = value }
//例如,student.name 会调用 name 属性的 getter 方法,student.name = "张三" 会调用 name 属性的 setter 方法。 //Kotlin 中声明属性(val/var)时,编译器会自动为属性生成:访问器:get()(所有属性)和 set()(仅 var);字段标识符field是 Kotlin 里专门用于访问属性「底层存储字段」的关键字 }