关键词:
package set
import java.util.*
import kotlin.math.absoluteValue
//临时变量 只是用一次推荐使用下划线开头
class Player(
_name: String, _age: Int, _isNormal: Boolean //构造参数
)
//属性
var name = _name
get() = field.replaceFirstChar if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
set(value)
field = value.trim()
//取绝对值
var age = _age
get() = field.absoluteValue
set(value)
field = age.absoluteValue
var isNormal = _isNormal;
fun main()
val p = Player("Jack", 20, true)
p.name = "rose"
println(p.name)
println(p.age)
println(p.isNormal)
可以把属性方到上面去 简化写法
package set
import java.util.*
import kotlin.math.absoluteValue
//临时变量 只是用一次推荐使用下划线开头
class Player(
_name: String,
var age: Int,
var isNormal: Boolean //构造参数
)
//属性
var name = _name
get() = field.replaceFirstChar if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
set(value)
field = value.trim()
fun main()
val p = Player("Jack", 20, true)
p.name = "rose"
println(p.name)
println(p.age)
println(p.isNormal)
对于java而言就是减少 this.age=age这样的操作
众所周知。java的构造方法不止可以写一个。对与kotlin如何实现呢
那就要讲到次构造函数了。
package set
import java.util.*
import kotlin.math.absoluteValue
//临时变量 只是用一次推荐使用下划线开头
class Player(
_name: String, var age: Int, var isNormal: Boolean //构造参数
)
//属性
var name = _name
get() = field.replaceFirstChar if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
set(value)
field = value.trim()
//次构造函数
constructor(name: String) : this(name, age = 20, isNormal = false)
//里面可以对代码进行操作
this.name = name.uppercase(Locale.getDefault());
fun main()
val p = Player("Jack", 20, true)
p.name = "rose"
println(p.name)
println(p.age)
println(p.isNormal)
val p2 = Player("Jack Liu")
println(p2.name)
次构造函数要调用主构造函数初始化提供默认值即可
默认参数
其实次构造函数的使用场景 如果不在次构造函数里面进行运算。可以写到构造方法当中
package set
import java.util.*
import kotlin.math.absoluteValue
//临时变量 只是用一次推荐使用下划线开头
class Player(
_name: String, var age: Int=20, var isNormal: Boolean=false //构造参数
)
//属性
var name = _name
get() = field.replaceFirstChar if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
set(value)
field = value.trim()
fun main()
val p = Player("Jack", 20, true)
p.name = "rose"
println(p.name)
println(p.age)
println(p.isNormal)
val p2 = Player("Jack Liu")
println(p2.name)
下面学习init代码块
之前java里面有一个 static代码块
他是再类加载到虚拟机的时候初始化
init的初始化块什么时候执行呢
他是再构造函数的时候执行。
我们可以用来对传递进来的数值进行检查
package set
import java.util.*
import kotlin.math.absoluteValue
//临时变量 只是用一次推荐使用下划线开头
class Player(
_name: String, var age: Int = 20, var isNormal: Boolean = false //构造参数
)
//属性
var name = _name
get() = field.replaceFirstChar if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
set(value)
field = value.trim()
init
//检查是否
require(age > 0) "age 必须大于0"
require(name.isNotBlank()) "姓名必须设置"
fun main()
val p = Player("Jack", 20, true)
p.name = "rose"
println(p.name)
println(p.age)
println(p.isNormal)
val p2 = Player("Jack Liu")
println(p2.name)
val p3 = Player("Jack Liu", age = 0)
这些代码初始化的地方挺多的 顺序是怎么样的呢
主构造函数里声名的属性。
类级别的属性赋值。
init初始化块里的属性赋值和函数调用
次构造函数里的属性赋值和函数调用
kotlin类与对象②(主构造函数|主构造函数定义临时变量|主构造函数中定义成员属性|次构造函数|构造函数默认参数)(代码片段)
...数四、构造函数默认参数一、主构造函数定义临时变量在Kotlin类中,可以在类声明时在类名后定义"主构造函数";在主构造函数中,可以定义成员属性,并为成员属性提供初始值;在主构造函数中,可以定义临时变量,临时变量一般... 查看详情
kotlin类与继承
类Kotlin使用class关键字声明类,类声明由类名、类头(指定其类型参数、主构造函数等)和由大括号包围的类体组成。类头和类体都是可选的,如果一个类没有类体大括号可省略class NoBody类的构造函数一类可以有一个主构造... 查看详情
kotlin类的初始化③(init初始化块|初始化顺序:主构造函数属性赋值->类属性赋值->init初始化块代码->次构造函数代码)(代码片段)
...目录一、init初始化块二、初始化顺序一、init初始化块在Kotlin类中,可以定义init初始化块,在其中可以为变量赋值,执行一些检查相关的代码,该init初始化块在创建类实例对象时执行;代码示例:在下面的代码中的init初始化块中,对name... 查看详情
kotlin类的初始化③(init初始化块|初始化顺序:主构造函数属性赋值->类属性赋值->init初始化块代码->次构造函数代码)(代码片段)
...目录一、init初始化块二、初始化顺序一、init初始化块在Kotlin类中,可以定义init初始化块,在其中可以为变量赋值,执行一些检查相关的代码,该init初始化块在创建类实例对象时执行;代码示例:在下面的代码中的init初始化块中,对name... 查看详情
kotlin的构造函数看这一篇就够了(代码片段)
在kotlin中,一个标准的继承写法是这样的classAA:BB(),你想过没有,为什么AA后面没有括号,而BB后面有呢?Kotlin和Java中有这样两个特性:1.子类继承父类时,需要在构造函数中调用父类的构造函数2.如果... 查看详情
InjectMocks 不适用于具有默认值的 Kotlin 构造函数参数
】InjectMocks不适用于具有默认值的Kotlin构造函数参数【英文标题】:InjectMocksdoesn\'tworkwithKotlinconstructorargumentswithdefaultvalues【发布时间】:2021-10-2604:47:31【问题描述】:编辑:我用mockito-kotlinhere创建了一张票我有一个这样定义的类... 查看详情
带有 JPA 的 Kotlin:默认构造函数地狱
】带有JPA的Kotlin:默认构造函数地狱【英文标题】:KotlinwithJPA:defaultconstructorhell【发布时间】:2015-11-0908:51:51【问题描述】:根据JPA的要求,@Entity类应该有一个默认(非arg)构造函数,以便在从数据库中检索对象时实例化它们... 查看详情
kotlin类与继承(代码片段)
类kotlin中使用关键字class声明类类声明由类名,类头(指定其类型参数,主构造函数等),花括号包围的类体构成,类头和类体都是可选的。classStudent如果一个类没有类体,则可以省略花括号classEmpty主... 查看详情
python构造函数
一个class只能有一个用于构造对象的__init__函数但python中的变量是无类型的,因此传给__init__的参数可以是任何类python中的函数参数在定义时可以有默认值,可以让__init__函数接受多个参数,在后面的一些参数给出默认值的方法让_... 查看详情
scala-构造函数(代码片段)
/*scala的构造函数分为主构造函数和辅助构造函数。一、主构造函数在Scala中,每个类都有主构造函数,和类的定义交织在一起。一个Scala类的主构造函数包括:1、构造函数的参数;2、类体中调用的方法;3、在类体中执行的语句... 查看详情
kotlin小悟-这个继承有点不一样(代码片段)
今天聊聊kotlin中关于构造函数的一个话题。我们知道,在kotlin中构造函数分为主构造函数和从构造函数,关于详细的内容,可以点击下面的文章链接了解。Kotlin系列之主构造方法和初始化语句块Kotlin系列之从构造方法... 查看详情
IntentService (kotlin) 的默认构造函数
】IntentService(kotlin)的默认构造函数【英文标题】:DefaultconstructorforIntentService(kotlin)【发布时间】:2017-04-0810:49:18【问题描述】:我是Kotlin的新手,并且对intentService有一点点堆栈。清单向我显示了一个错误,即我的服务不包含默... 查看详情
kotlin中定义类field关键字,主构造函数和次构造函数详解(代码片段)
...算属性,和防范竞态条件classStudent//field关键字:Kotlin针对你定义的每个属性,都会产生一个field,一个getter,以及一个setter//field用来存储属性数据,不能直接定义field,kotlin会封装field,保护它里面的数据ÿ... 查看详情
kotlin中定义类field关键字,主构造函数和次构造函数详解(代码片段)
...算属性,和防范竞态条件classStudent//field关键字:Kotlin针对你定义的每个属性,都会产生一个field,一个getter,以及一个setter//field用来存储属性数据,不能直接定义field,kotlin会封装field,保护它里面的数据ÿ... 查看详情
kotlin初学者类和对象(代码片段)
...性次构造器默认值初始化顺序无构造器前言 Kotlin是一门面向对象的开发语言。也有着面向对象语言的特性。而面向对象的三大特性即封装、继承、多态,这是每一门面向对象语言都具有的特性。定义类 使用... 查看详情
kotlin-jpa 插件不生成默认构造函数
】kotlin-jpa插件不生成默认构造函数【英文标题】:kotlin-jpapluginnotgeneratingdefaultconstructor【发布时间】:2019-08-0906:24:09【问题描述】:我正在使用kotlin-jpa为我的kotlin实体生成默认构造函数,但是没有生成:我刚用过:id("org.jetb... 查看详情
深入kotlin-类(代码片段)
类Kotlin中定义类有些地方不同于java。不需要public一个类默认就是public的,所以不用显示地声明一个类为public。不需要花括号如果一个类是空实现,可以不需要classMyClass主构造方法Kotlin规定每个类允许有一个主构造方法和... 查看详情
kotlin语言中的继承与构造函数(详解)(代码片段)
学习kotlin时,有很多小伙伴无法理解为何有的继承结构父类后面需要加括号,有时候却不用加括号,本篇文章小编将为你们解除这个困惑!顺便为大家详解一下kotlin中的主构造函数和次构造函数。 ... 查看详情