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

外贸网站建设的重要性c2c模式在我国开始于1999年的

外贸网站建设的重要性,c2c模式在我国开始于1999年的,山西做网站的,美客多电商平台入驻条件文章目录 1.field2.计算属性3.主构造函数4.次构造函数5.默认参数6.初始化块7.初始化顺序7.延迟初始化lateinit8.惰性初始化 1.field field 关键字通常与属性的自定义 getter 和 setter 一起使用。当你需要为一个属性提供自定义的行为时,可以使用 field 来访问或设置…

文章目录

      • 1.field
      • 2.计算属性
      • 3.主构造函数
      • 4.次构造函数
      • 5.默认参数
      • 6.初始化块
      • 7.初始化顺序
      • 7.延迟初始化lateinit
      • 8.惰性初始化

1.field

field 关键字通常与属性的自定义 getter 和 setter 一起使用。当你需要为一个属性提供自定义的行为时,可以使用 field 来访问或设置该属性的实际存储值。

class Player {var age: Int = 0get() = field  // 自定义 getterset(value) {  // 自定义 setterif (value >= 0) {field = value} else {println("年龄不能为负数")}}
}fun main() {val player = Player()player.age = 30  // 正常设置println(player.age)  // 输出 30player.age = -5  // 尝试设置无效的年龄println(player.age)  // 输出 30(因为设置失败,所以仍然是 30)
}

更复杂的自定义行为

class Person {private var _age: Int = 0  // 私有字段var age: Intget() {println("获取年龄: $_age")return _age}set(value) {if (value >= 0) {println("设置年龄: $value")_age = value} else {println("年龄不能为负数: $value")}}
}fun main() {val person = Person()person.age = 30  // 输出: 设置年龄: 30println(person.age)  // 输出: 获取年龄: 30//        30person.age = -5  // 输出: 年龄不能为负数: -5println(person.age)  // 输出: 获取年龄: 30//        30
}
  • field 关键字:在自定义的 getter 和 setter 中,field 代表属性背后的实际存储字段。
  • 自定义 getter 和 setter:允许你在读取和写入属性时执行额外的逻辑,如数据验证、日志记录等。
  • 私有字段:为了更好地控制属性的访问,可以使用私有字段来存储实际值,并通过公开的属性提供访问接口。

2.计算属性

  • 计算属性:这些属性没有后台字段来存储值,而是通过 getter 方法在每次访问时计算并返回值。
  • 自定义 getter:你可以在类中定义一个没有显式初始化值的 val 属性,并为其提供一个自定义的 getter 方法。
class Rectangle(val width: Int, val height: Int) {// 计算属性val area: Intget() = width * height  // 自定义 getter
}fun main() {val rectangle = Rectangle(10, 5)println("宽度: ${rectangle.width}")  // 输出 宽度: 10println("高度: ${rectangle.height}")  // 输出 高度: 5println("面积: ${rectangle.area}")  // 输出 面积: 50
}

3.主构造函数

在People类的定义头中定义一个主构造函数,使用临时变量为Player的各个属性提供初始值,在Kotlin中,为了便于识别临时变量通常都会以下划线开头的名字命名

class People(_name:String,_age:Int,_isNormal:Boolean
) {var name = _nameget() = field.capitalize()set(value){field = value.trim()}var age = _ageget() = fieldset(value){field = value.absoluteValue}var isNormal = _isNormal
}fun main(){val people = People("Jack", 20, true)println(people.name)println(people.age)println(people.isNormal)
}

4.次构造函数

除了主构造函数还有次构造函数,我们可以定义多个次构造函数来配置不同的参数组合。

class People0(_name:String,var age:Int,var isNormal:Boolean
) {var name = _nameget() = field.capitalize()set(value){field = value.trim()}constructor(name : String) : this(name , age = 10, isNormal = false) {this.name = name.capitalize()}}fun main(){val people0 = People0("rose")println(people0.name)  // Roseprintln(people0.age) // 0println(people0.isNormal) // false}

5.默认参数

定义构造函数时,可以给构造函数指定默认值,如果用户调用时不提供值参,就是用这个默认值。

class People1(_name:String,var age:Int = 99,var isNormal:Boolean = false
) {var name = _nameget() = field.capitalize()set(value){field = value.trim()}constructor(name : String) : this(name , age = 10, isNormal = false) {this.name = name.capitalize()}}fun main(){val people1 = People1(_name = "jim")println(people1.name) // Jimprintln(people1.age) // 99println(people1.isNormal) // false
}

6.初始化块

初始化块可以设置变量或值,以及执行有效性检查,如检查传给某构造函数的值是否有效,初始化块代码会在构造类实例时执行

class People1(_name:String,var age:Int = 99,var isNormal:Boolean = false
) {var name = _nameget() = field.capitalize()set(value){field = value.trim()}constructor(name : String) : this(name , age = 10, isNormal = false) {this.name = name.capitalize()}init {require(age > 0){"年龄设置不能小于0"}}
}fun main(){val people1 = People1(_name = "jim",-1, false)println(people1.name) // Jimprintln(people1.age) // 198println(people1.isNormal) // false
}

在这里插入图片描述

7.初始化顺序

  • 主构造函数里声明的属性
  • 类级别的属性赋值
  • init初始化块里的属性赋值和函数调用
  • 次构造函数里的属性赋值和函数调用
class Student(_name : String,val age : Int
){var name = _namevar score = 10var hobby = "music"val subject : Stringinit {println("initializing student...")subject = "Chinese"}constructor(_name:String) : this(_name,10){score = 100}
}fun main(){val student = Student("Jack")}
   public Student(@NotNull String _name) {Intrinsics.checkNotNullParameter(_name, "_name");this(_name, 10);this.score = 100;}public Student(@NotNull String _name, int age) {Intrinsics.checkNotNullParameter(_name, "_name");super();this.age = age;this.name = _name;this.score = 10;this.hobby = "music";String var3 = "initializing student...";System.out.println(var3);this.subject = "Chinese";}

在这里插入图片描述

7.延迟初始化lateinit

  • 使用lateinit关键字相当于做了一个约定:在用它之前负责初始化
  • 只要无法确认lateinit变量是否完成初始化,可以执行isInitialized检查
class Player4 {lateinit var equipment : Stringfun ready(){equipment = "AK-47"}fun battle(){if (::equipment.isInitialized){println(equipment)}else{println("没有武器")}}
}fun main(){val player4 = Player4()// player4.ready()player4.battle()
}

8.惰性初始化

延迟初始化并不是初始化的唯一方式,你也可以暂时不初始化某个变量,知道首次使用它,叫做惰性初始化。

class Player5(_name :String) {var name = _nameval config by lazy {loadConfig()}private fun loadConfig():String{println("loading...")return "xxx"}
}fun main() {val p = Player5("kim")Thread.sleep(4000)// 4s后才会打印println(p.config)
}
http://www.sczhlp.com/news/106160/

相关文章:

  • 基于WebSocket的命令与控制工具WSC2详解
  • LocalDateTime节日和平日在时间占比计算方法
  • JSON字符串转换List对象列表 JSONArray toJavaList
  • 网站建设好还需要续费吗wordpress php.ini
  • 没有网站想做个链接页面怎么做解析域名网站
  • 地方宣传网站建设的必要性机关网站建设引导语
  • 网站建设朋友圈怎么写ui设计培训内容
  • 自己在本地建的网站 别人怎么访问教程凡客沙发官网
  • 嘉兴类网站系统总部网站上怎么做动画广告视频在线观看
  • 网站建设项目风险管理的主要内容电脑做会计从业题目用什么网站
  • 新发布一个网站公告怎么做专门做广东11选5的网站
  • 山东食品行业网站开发开发平台需要什么技术
  • vue3 使用 docx-preview 预览 Word文档
  • 数据库原理-第三章——SQL
  • 做网站的公司 北京北京网站建设价格
  • 建设网站要那些公众号开发 表格
  • 设计好看的网站工业设计网站设计
  • 郑州专业网站制作费用报价金蝶在线登录入口
  • 珠海做网站的网络公司西安百度
  • 啥是CPU
  • C# Avalonia 15- Animation- CodeAnimation
  • 怎么seo网站推广福永小学网站建设
  • 和创互联的网站是多少云南网站建设选天软
  • 网站原则郑州seo关键词推广
  • 帮别人做网站的公司是外包吗西地那非片的正确服用方法
  • 网站空间租用多少钱北京新网数码信息技术有限公司
  • wordpress+vps建站想要做网站
  • 电动车行业网站建设福田做网站价格
  • 性价比最高的网站建设公司线上营销方式主要有哪些
  • wordpress 主题名称呼和浩特网站建设SEO优化