02.Scala--lazy关键字定义变量--使用时才初始化
scala的lazy关键字的使用和理解
变量的初始化延迟,表达式不会被重复计算。就像java中实现懒汉式的单例
在Scala中,使用lazy关键字来实现延迟执行,如果使用了lazy定义某一个变量,则这个变量只有在被使用时才会执行初始化
1.不使用懒值定义---立即实例化
object TestLazy {
def init() : Int = {
println("init ::::")
0
}
//不使用懒值定义 立即实例化
val resource :Int = init()
def main(args: Array[String]): Unit = {
/* //val b = 10/1
lazy val a= 10/10
print(a)*/
println("start-----------")
println(resource)
println("end-------------")
}
}
执行结果
init ::::
start-----------
0
end-------------
2.使用lazy定义变量---使用时才初始化
/**
* @author star
*使用lazy关键字修饰变量后,只有在使用该变量时,才会调用其实例化方法
*/
object TestLazy2 {
def init() : Int = {
println("init ::::")
0
}
//懒值定义变量 ,使用时才实例化
lazy val resource :Int = init()
def main(args: Array[String]): Unit = {
/* //val b = 10/1
lazy val a= 10/10
print(a)*/
println("start-----------")
println(resource) //使用时才初始化
println("end-------------")
}
}
执行结果
start-----------
init ::::
0
end-------------
使用lazy声明的变量只有在使用的时候才会进行初始化。在Scala中,通过使用保护式来实现惰性值。当客户代码引用了惰性值时,保护式会拦截引用并检查此时是否需要初始化惰性。由于保护式能够确保惰性在第一次访问之前便已初始化,因此增加保护式检查只有当第一次引用惰性值时才是必要的。由于,保护式一直会检查惰性值是否已经初始化,所以惰性值与“立刻”值相比,其具有额外的开销。所以我们需要考虑惰性值的使用情况。只有当保护式带来的额外开销小于初始化带来的开销时,或者将某些值惰性化能简化系统初始化过程并确保执行顺序满足条件时,我们才应该使用惰性值
分类:
09.scala
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下