每天学一点Scala之 伴生类和伴生对象
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,1、 object 相当于class的单个实例,因此,在object里声明的变量都是静态变量,静态方法2、 在object里声明的变量,都是全局变量,也就是类的公共属性,或者类似于java中父类的属性
千家信息网最后更新 2025年12月02日每天学一点Scala之 伴生类和伴生对象
1、 object 相当于class的单个实例,因此,在object里声明的变量都是静态变量,静态方法
2、 在object里声明的变量,都是全局变量,也就是类的公共属性,或者类似于java中父类的属性
3、 object里的构造器,也就是object 内部不在method中的代码,都属于构造器的内容
4、 同样,object的主构造器只会在第一次调用时执行,多次调用,只会执行一次。
object使用场景
1、 单例模式
2、 工具类
伴生对象与 伴生类?
如果有一个class,还有一个与class同名的object,那么就称这个object是class的伴生对象,class是object的伴生类
要求:
伴生类和伴生对象必须存放在一个.scala文件之中
特性?
//伴生对象、伴生类里的私有属性 跟 普通的私有属性 相比?
//伴生对象,伴生类里的私有属性的 使用范围,扩大了。
//伴生对象 与 伴生类可以互相访问彼此的私有属性,而普通私有属性仅仅只能在自己类里使用的
package com.xej.learning.objectLearning/** * objectLearning 测试 */private[objectLearning] class Kafka(val name: String){ //目的:测试多次调用object时,其主构造方法调用几次 def sayHello(): Unit ={ objectTest.name objectTest.name objectTest.name println("--------------------") }}object objectTest { val name = "spark" println("----object----主构造器--------") def main(args: Array[String]): Unit = { new Kafka("spark").sayHello() }}执行结果如下:
----object----主构造器----------------------------
测试用例二:
package com.xej.learning.objectLearning/** * 主要测试伴生对象,伴生类里的私有属性的访问范围 */private[objectLearning] class Student(val name: String, val age: Int, address: String="xizhimen"){ privateval sex = "male" val weight = 80 def sayHello(): Unit ={ Student.address = address //访问伴生对象里的普通属性 以及 私有属性 println("name:\t" + name + " ----> " + " age:\t" + age + "\naddress:\t" + Student.address + " ----> school:\t" + Student.school) }}object Student{ //伴生对象里的私有属性 跟 普通的私有属性 相比? //伴生对象,伴生类里的私有属性的 使用范围,扩大了。 //伴生对象 与 伴生类可以互相访问彼此的私有属性,而普通私有属性仅仅只能在自己类里使用的 privateval school = "bjtu" //只能在伴生类里,调用,其他地方不能调用 var address = "beijing" //除了伴生类里,其他地方也可以调用,跟普通属性一样 //访问伴生类里的属性 val stu = new Student("lisi",22, "haidian") println("----访问----伴生类里的---属性-----name:\t" + stu.name) println("----访问----伴生类里的---私有属性-----sex:\t" + stu.sex) println("----访问----伴生类里的---属性-----weight:\t" + stu.weight)}object objectTest2 { def main(args: Array[String]): Unit = { //调用伴生对象里的public属性 println("----address:\t" + Student.address) //school是伴生对象的私有属性,这里不能访问的 //println("----school:\t" + Student.school) new Student("zhansan", 19).sayHello() new Student("xiaoming", 22,"haidian").sayHello() }}测试结果:
----访问----伴生类里的---属性-----name: lisi----访问----伴生类里的---私有属性-----sex: male----访问----伴生类里的---属性-----weight: 80----address: beijingname: zhansan ----> age: 19address: xizhimen ----> school: bjtuname: xiaoming ----> age: 22address: haidian ----> school: bjtuProcess finished with exit code 0
总之:
看到伴生对象,伴生类,要立马想到私有属性
伴生对象的使用场景,也就是说,伴生对象是干什么用的,这样的话,对于理解marathon源码,spark源码是有帮助的,不至于一头雾水。
属性
对象
私有
普通
构造器
测试
变量
也就是
范围
地方
场景
方法
源码
结果
静态
一头雾水
这样的话
一头
之中
也就是说
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
平安科技互联网客服专员面试
postman链接数据库
结构化软件开发方法的核心是
昭化区网络安全委员会
服务器性能指标怎么写
steam服务器过于繁忙
msde数据库下载官网
服务器管理口账号密码配置
在命令窗口删除数据库
美宜佳数据库系统设计过程
网络安全法规定关键信息的
浙江省网络安全宣传周启动
pdb数据库说明
东海港软件开发
宝可梦世界联机服务器苹果能玩吗
登不上服务器失败
机房服务器升级
查询数据库中同样的数据
电源管理软件开发
一把手分管网络安全
云转码服务器租用
a3睿财软件开发商
保障政务网络安全
移动应用服务器用什么数据库
软件开发新趋势分析
一个单位的网络安全
软件开发中遇到最坑的事是什么
广东省网络安全协会一等奖
天津信息化软件开发设施
软件开发相关设备有哪些