“云朵喝了酒,晚霞上了头”~ 慢慢的认识世界,慢慢的理解生活。我们一路向前,对数据成员的初始化是程序向前的底气、运行的基础😜~ 快来开始今天的学习之旅吧~
一、getter & setter方法
🔅Pick 1->为什么要有getter和setter方法?
为了保障程序的安全性,我们常常会将类中的一些成员定义为private属性,而类的外部无法实现对private属性成员的直接访问,因此需要setter和getter方法以实现在类的外部对【私有成员属性的值】的设置和获取。
class Person1 {
/*
系统此时已完成:
1.创建name时内部对应的属性field用于存值。
2.提供setter方法
3.提供getter方法
*/
var name:String=""
var age:Int=0
var tag:String=""
}
🔅Pick 2->属性的setter和getter方法何时需要重写?
★setter():
①外部给值时需要进行额外的处理。
②捕获外部给值的时机。
★getter():
①外部获取值时需要进行额外的处理。
②捕获外部需要的时机。
③懒加载。[对象创建的同时不赋予初值,需要使用的时候(被调用时)再赋值,
此时在getter中赋值]
class Person{
var age:Int=0
set(value) = println(value)
// set(value) {
// tag = if(age in 1..18){
// "未成年"
// }else{
// "成年人"
// }
// //需要把age的值存到其内部属性才能实现真正的存储
// field = value
// }
}
🔅Pick 3->调用getter和setter方法只有通过getAge(),setAge()形式访问,
return和赋值语句无法调用。
class Person{
var age=0
/*
get里不能调用get方法; set不能调用set方法
->会出现死循环
例:
get(){
return age //报错,返回语句默认调用了get方法,get方法里调用了get方法
}
set(value){
age=20 //报错,赋值语句默认调用set方法。即set方法里调用了set方法
filed=value
}
*/
}
🔅Pick 4->实现内部可以改变数据(赋值),外部只可访问、不可赋值。
👉 私有化set方法
class Person{
var age:Int=0
private set
}
二、延迟初始化( lateinit)
🔅Pick 1->适用情况:
一个变量必须有值 但定义时不确定赋予其什么值
🔅Pick 2->注意事项
①在使用该变量前必须赋值
②只能修饰var变量
🔅Pick 3->语法格式
class Person1{
//延迟初始化只适用于var类型的数据
lateinit var name:String
}
三、懒加载 (by lazy)
🔅Pick 1->适用情况:只适用于val数据 不适用于var数据
(此时数据只能被初始化一次 & lazy里未提供set方法)
🔅Pick 2->注意事项:懒加载只会调用一次 后续访问的是变量的值
🔅Pick 3->语法格式
class Person1{
//name1只初始化1次,只能用于val数据
val name1:String by lazy {
//输出提示信息测试
println("在调用lazy")
"jack"
}
}
四、static属性/方法
在真正了解到静态属性与静态方法前,我们先解决下面两个问题:
Q1->什么时候需要对象?
·需要存数据的时候
·只有对象才能完成某些功能时
Q2->什么是实例方法(对象方法)?
·必须有对应这个类的对象才能调用的方法
·缺点:必须要创建对象并通过对象名访问
优点:有这个对象 可对该对象的数据进行操作
在理解对象方法之后相信大家都会有这么一个疑问:对象方法和静态方法有什么区别呢?请听这回分解😜
🔅Pick 1->静态方法/静态属性的适用情况
·该方法不需要访问类中数据成员和这个类的实例方法。
·在项目的多个模块、多个类中使用,不希望创建对象就可直接使用某个类的方法
[直接通过类名访问 不需要创建对象]
🔅Pick 2->静态的特点
·当类被加载到内存中时,静态的属性和方法同时被加载。
此时类和静态属性、静态方法同时存在,可直接使用类名访问。
🔅Pick 3->静态与实例方法的访问
---静态方法不能访问类的属性或者实例方法;
[静态方法被加载时,对象不存在,故无法访问]
---实例方法可以访问静态属性或静态方法。
[类被加载时,静态方法和静态属性同时被加载
创建对象之后二者依旧存在,故可以访问其静态内容]
🔅Pick 4->静态的声明
Java->static
kotlin->伴生对象 companion object
//Java使用static关键字
class Test{
static String s="";
}
//Kotlin中没有static关键字,使用伴生对象实现静态化
class Person3{
companion object{
@JvmStatic//加上之后使test()本身成为静态方法,
// 不加时是通过静态的Companion类访问非静态的test方法
fun test()= println()
}
五、结语
★getter & setter->对类中私有属性的值得设置和获取
“你能干啥?干啥啥不行?设值获值啥都行😋”
★延迟初始化->一定有值,定义时不确定
lateinit var 说:别着急,总会有哒🌹~
★懒加载->数据只能被初始化一次,定义时不确定赋予什么值
比较lazy,喜欢val
只想做个咸鱼,初始化一次就躺平🙃
★静态属性/方法->不用通过对象调用,一经变动,全局皆动
“别担心,一直都在~”🤗