kotlin中伴生对象的特点:
- 在类中创建(使用companion object关键字)
- 有且只有一个
- 不用实例化类即可调用
- 可定义编译期常量
实例:
//伴生对象
class Student{
companion object {
fun createstudent(name:String,age:Int){
println("我的名字是${name},我的年龄是${age}")
}
}
}
fun main() {
Student.createstudent("小明",15)
}
上述例子中没有实例化对象,直接调用类中的方法实现了输出。
拓展:const val和val的区别
| 特性 | const val | val |
|---|---|---|
| 本质 | 编译期常量(Compile-time constant) | 运行时常量(Runtime constant) |
| 赋值要求 | 必须直接赋值字面量 / 常量表达式 | 可赋值字面量、函数返回值、表达式等 |
| 作用域 | 仅顶层(top-level)/ 对象(object)/ 伴生对象(companion object) | 任意作用域(类、函数、顶层等) |
| 编译后表现 | 直接嵌入字节码(类似 Java static final) | 生成 getter 方法(类内)/ 直接常量(顶层) |
| 可变性 | 完全不可变(编译期确定,无法修改) | 引用不可变(值可能是可变对象) |
| 支持类型 | 仅基础类型(String/Int/Boolean 等) | 任意类型(包括自定义类、集合等) |