kotlin 类成员变量(属性)和成员函数(行为)

类的成员包含两部分内容

1,成员属性:成员变量,类内部的变量

2,成员行为(功能):成员方法(函数),类内部的方法(函数)

类的成员方法:

package com.testClass

/**
 * Created by jingwen on 19/4/14.
 */

class Person{
    init {
        println("init person")
    }
    
}

class Student(var name:String,var age:Int){
    fun say(content:String){
        println(name+":"+content)
    }
}

fun main(args: Array<String>) {
    var student:Student = Student("jingwen",21)
    student.say("老板,写程序累了,给安排一个程序员鼓励师,休息一下")
}

执行结果:

jingwen:老板,写程序累了,给安排一个程序员鼓励师,休息一下

Process finished with exit code 0

类的成员属性

package com.testClass

/**
 * Created by jingwen on 19/4/14.
 */

class Person{
    init {
        println("init person")
    }

}

class Student(var name:String,var age:Int){

    var schoolName = "无名氏"
    var city ="东莞"//set 和 get 在谁的屁股后面就是谁的.city后面就是city的set和get,并不是schoolName的set和get方法
    get() {
        println("get city = $field")
        return field
    }
    set(value) {
        field = value
        println("set city = $field")
    }

    fun say(content:String){
        println(name+":"+content)
    }
}

fun main(args: Array<String>) {
    var student:Student = Student("jingwen",21)
    student.say("老板,写程序累了,给安排一个程序员鼓励师,休息一下")

    student.city = "天津"
    student.schoolName="南开大学"

    println(student.city)
    println(student.schoolName)
}

执行结果:

jingwen:老板,写程序累了,给安排一个程序员鼓励师,休息一下
set city = 天津
get city = 天津
天津
南开大学

Process finished with exit code 0

属性的初始化,有两个懒家伙:

lateinit和by lazy
package com.testClass

/**
 * Created by jingwen on 19/4/14.
 */

class Person{
    init {
        println("init person")
    }

}

class Student(var name:String,var age:Int){

    lateinit var schoolName:String
    var city ="东莞"//set 和 get 在谁的屁股后面就是谁的.city后面就是city的set和get,并不是schoolName的set和get方法
    get() {
        println("get city = $field")
        return field
    }
    set(value) {
        field = value
        println("set city = $field")
    }

    val person:Person by lazy {
        println("lazy init Person()")
        Person()
    }

    fun say(content:String){
        println(name+":"+content)
    }
}

fun main(args: Array<String>) {
    var student:Student = Student("jingwen",21)
    student.say("老板,写程序累了,给安排一个程序员鼓励师,休息一下")

    student.city = "天津"

    println(student.city)

    println(student.age)

    println(student.person)

    println(student.schoolName)//异常程序崩溃了,需要先赋值后使用的哈(student.schoolName = "南开大学")

}

执行结果:

Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinit property schoolName has not been initialized
jingwen:老板,写程序累了,给安排一个程序员鼓励师,休息一下
set city = 天津
	at com.testClass.Student.getSchoolName(test.kt:16)
get city = 天津
	at com.testClass.TestKt.main(test.kt:49)
天津
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
21
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
lazy init Person()
init person
com.testClass.Person@579bb367
	at java.lang.reflect.Method.invoke(Method.java:497)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

Process finished with exit code 1

猜你喜欢

转载自blog.csdn.net/jingwen3699/article/details/89295230