类的成员包含两部分内容
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