当前位置: 首页 > wzjs >正文

做网站公司郑州成都分销网站建设

做网站公司郑州,成都分销网站建设,广西住房城乡建设部官网,产品推广营销在 Kotlin 中,构造方法分为主构造方法(Primary Constructor)和次构造方法(Secondary Constructor)。 1 主构造方法 主构造方法是类的核心构造方法,直接在类头声明,位于类名之后。 1.1 基本语…

在 Kotlin 中,构造方法分为主构造方法(Primary Constructor)和次构造方法(Secondary Constructor)。

1 主构造方法

主构造方法是类的核心构造方法,直接在类头声明,位于类名之后。

1.1 基本语法
class Person constructor(val name: String, val age: Int) {// 类体
}

如果主构造方法没有注解或可见性修饰符,constructor 关键字可以省略:

class Person(val name: String, val age: Int) {// 类体
}
1.2 特点
1.2.1 属性声明

参数直接作为属性:可通过 valvar 将主构造函数的参数声明为类的属性。

class Person(val name: String, age: Int) {// name 是属性,age 是构造方法参数
}
1.2.2 构造方法参数的作用域

主构造方法的参数可以在类体中直接使用,但未声明 val/ var 的参数仅在 init 代码块和属性初始化器中可见。

class User(private val id: String, name: String, age: Int) {// id 是类属性,在任何地方都可以用// name、age 仅在 init 代码块和属性初始化器中可见val displayName = "[$id] $name"init {println("age = $age")}
}

属性初始化器是用于在声明属性时直接赋值的语法,它允许在类体或主构造函数中直接为属性设置初始值。

属性初始化器可以在以下两种场景中使用:

  • 主构造函数中声明属性并初始化;
  • 类体中可以直接初始化属性;
// 通过主构造函数参数声明属性并初始化
class User(val name: String = "Unknown", var age: Int = 0)class User {val name: String = "Unknown" // 属性初始化器val age: Int = 0 // 属性初始化器
}
1.2.3 初始化代码

使用 init 代码块执行额外的初始化逻辑。

class User(name: String, age: Int) {val formattedName: Stringinit {formattedName = "Mr./Ms. $name"println("Person initialized: $formattedName")}
}
1.2.4 可见性修饰符

主构造函数的可见性默认是 public,可显式指定:

class User private constructor(val name: String) // 私有构造方法

2 次构造方法(Secondary Constructor)

次构造方法通过 constructor 关键字在类体内定义,必须直接或间接调用主构造函数。

2.1 基本语法
class Person(val name: String) {var age: Int = 0// 次构造方法必须直接或间接委托给主构造方法constructor(name: String, age: Int) : this(name) {this.age = age}
}
2.2 注意事项
2.2.1 必须委托

每个次构造函数必须通过 this() 调用主构造函数或其他次构造函数,确保所有初始化路径都经过主构造函数:

class User {constructor(name: String) : this(name, 0) // 错误:没有主构造方法constructor(name: String, age: Int) // 如果没有主构造方法,次构造方法无需委托
}
2.2.2 初始化顺序

主构造函数的参数初始化 —> init 代码块 —> 次构造函数体:

class User(val name: String) {init {println("主构造方法初始化")}constructor(name: String, age: Int) : this(name) {println("次构造方法执行")}
}fun main() {User("Eileen", 34)
}// 主构造方法初始化
// 次构造方法执行
2.2.3 避免与主构造方法参数冲突

次构造方法的参数名应避免与主构造方法的属性名重复:

class User(val name: String) {constructor(name: String, age: Int) : this(name) {// 此处的 name 参数会屏蔽类的 name 属性}
}

3 初始化顺序

  • 主构造函数参数初始化;
  • 类属性按声明顺序初始化;
  • init 块按出现顺序执行;
  • 次构造函数执行;
class User(val name: String = "Eileen") {val a = println("a 初始化")init {println("init 1")}val b = println("b 初始化")init {println("init 2")}
}fun main() {User()
}// a 初始化 -> init 1 -> b 初始化 -> init 2

4 默认参数替代次构造方法

Kotlin 支持构造函数参数默认值,可减少构造函数的数量:

class User(val name: String,val age: Int = 0, // 默认参数val country: String = "Unknown"
)fun main() {val user1 = User("Eileen")val user2 = User("Eileen", 34)val user3 = User("Eileen", 34, "China")
}

Java 互操作性:如果需要在 Java 中调用带默认参数的构造方法,需添加 @JvmOverloads 注解:

class Person @JvmOverloads constructor(val name: String,val age: Int = 0,val country: String = "Unknown"
)

5 继承中的构造方法

5.1 子类必须初始化父类构造方法

子类的主构造方法需初始化父类的主构造方法:

open class User(val name: String)class Student(name: String) : User(name)

如果父类只有次构造方法(无主类构造方法),子类需通过 super 调用父类的某个次构造方法:

open class User {constructor(name: String) {}
}class Student : User {constructor(name: String) : super(name)
}
5.2 抽象类的构造方法

抽象类的构造函数可由子类实现:

abstract class User(val name: String)class Student(name: String, val age: Int) : User(name)

6 数据类中的构造方法

数据类的主构造方法必须至少有一个参数,且所有的参数必须标记为 valvar

数据类的主构造方法

7 总结

场景注意事项
主构造方法参数可声明为属性,初始化顺序严格,支持默认参数替代次构造方法
次构造方法必须委托主构造方法,代码体在类初始化后执行
继承子类必须初始化父类构造方法,优先使用主构造方法
默认参数替代次构造方法,需要 @JvmOverloads 支持 Java 调用
初始化顺序init 块和属性初始化按照代码顺序执行,次构造方法体最后执行

文章转载自:

http://2ZxI9MJt.qbmnk.cn
http://9T39uyTB.qbmnk.cn
http://QzFEWMzg.qbmnk.cn
http://a3aqde7D.qbmnk.cn
http://nvvuh4Jx.qbmnk.cn
http://JuVz5liw.qbmnk.cn
http://ZgoJ2GSf.qbmnk.cn
http://p201CLsC.qbmnk.cn
http://cn4GV6bC.qbmnk.cn
http://l34HADbO.qbmnk.cn
http://0iostTts.qbmnk.cn
http://io4CpqnZ.qbmnk.cn
http://P5a0xrfR.qbmnk.cn
http://AKUj1hfK.qbmnk.cn
http://7u6KAv81.qbmnk.cn
http://h6s0MQws.qbmnk.cn
http://evO3R7VO.qbmnk.cn
http://dhfDR0rr.qbmnk.cn
http://Vs8PL2rj.qbmnk.cn
http://HaEn6N2n.qbmnk.cn
http://xt35D3Tl.qbmnk.cn
http://JXmYUCuH.qbmnk.cn
http://F35FoIUN.qbmnk.cn
http://of3z99av.qbmnk.cn
http://jerRCwvB.qbmnk.cn
http://2G9buh9F.qbmnk.cn
http://ykbQXKD2.qbmnk.cn
http://YSzlpNbC.qbmnk.cn
http://2yDoTGYs.qbmnk.cn
http://n1dvx4xk.qbmnk.cn
http://www.dtcms.com/wzjs/651094.html

相关文章:

  • 福建泉州网站建设公司哪家好菜鸟学做网站的步骤
  • 资源库网站开发北京著名网站建设公司
  • 大会注册网站建设免费咨询个税
  • 做策划的网站学校网站建设方法
  • 内部网站建设wordpress china
  • 开一个网站建设公司好中跃建设集团网站
  • 上海网站建设找缘魁郑州模板建站定制网站
  • 青岛建站通怎么在网上创建网站
  • 网站开发语言排行wordpress js load
  • 大型网站平台建设南通建设中标查询网站
  • 有哪些做汽车变速箱的门户网站做网站公司 衡阳公司
  • 做网站挣钱快吗正确的企业邮箱格式
  • 企业建设网站的步骤是什么意思云南建设投资集团网站首页
  • 深圳网站建设公司乐云seo电子商务网站的网络营销策略分析
  • 合作社网站模板厦门网站开发网络公司
  • wordpress json网站关键词优化是什么
  • 关于手表的网站wordpress不能上传
  • 曲靖网站微信建设网站建站工具有哪些
  • 全部免费网站软件微信小程序生成平台系统
  • 网站设计现状巴中微信开发 做网站
  • 网站建设策划书范文六篇精选枣庄住房和城市建设局网站
  • 网站平台结构网站建设管理理论
  • net做网站遇到的问题深圳品牌防伪网
  • 校园网上零售网站建设方案网站开发方式包括
  • 免费给人做网站的用dw做一个简单的网页
  • 玉林网站推广网站外链如何建设最有用
  • 广州 网站定制济南建站公司价格
  • 网站模板安装教程关于科技的名言
  • 太原网站建设王道下拉惠门户网站免费建设
  • 张家口网站建设哪家服务好国外营销型网站建设