首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

KotlinKotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )

构造函数声明属性 ---- 声明属性可以类中使用 var / val 属性名称 : 属性类型 声明属性 , 也可以构造函数声明属性 ; ① 正常构造函数 : 构造函数是普通构造函数...name : String = name var age : Int = age } ② 主构造函数声明属性 : 构造函数 , 可以直接声明类属性 , 下面的代码 与 上面的代码是等价...代码执行顺序 : init 初始化代码块 , 与类属性定义优先级相同 , 类对象实例初始化时 , 会按照在类定义顺序 , 依次执行类属性初始化和 init 初始化代码块 ; 4 ....主构造函数参数 和 成员变量访问方式 ---- 1 . 主构造函数参数访问性 : 可以属性字段初始化赋值 和 init 初始化代码块 访问主构造函数参数变量值 ; 2 ....创建实例对象 : Kotlin 没有 new 关键字 , 使用 类名 ( 构造函数参数列表 ) 方式 , 创建类对象实例 ; 2 .

3.2K10

Kotlin】类初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数定义成员属性 | 次构造函数 | 构造函数默认参数 )

文章目录 一、主构造函数定义临时变量 二、主构造函数定义成员属性 三、次构造函数 四、构造函数默认参数 一、主构造函数定义临时变量 ---- Kotlin , 可以 类声明 时 类名后...定义 " 主构造函数 " ; 构造函数 , 可以 定义 成员属性 , 并为 成员属性 提供 初始值 ; 构造函数 , 可以定义 临时变量 , 临时变量 一般使用 以下划线为开头 名称...---- 构造函数 定义临时变量 , 格式为 : class 类名(_临时变量名: 临时变量类型){} 构造函数也可以 定义成员属性 , 格式为 : class 类名(var 成员属性名:...---- Kotlin 类只允许 定义类时 定义 一个主构造函数 , 在其中可以定义 临时变量 , 也可以定义 属性变量 ; 次构造函数 定义 Kotlin 内部 , 可以定义 多个 次构造函数...---- 定义 构造函数 时 , 可以为 构造函数 参数 指定 默认值 , 如果 用户传入了 值参 则 使用用户传入值 , 如果用户没有传入值 则 使用该 默认值 ; 如果 构造函数 参数有 指定默认值

4.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin 委托属性Android开发几个使用场景!

如你所见,委托属性并没有什么神奇。但是,它虽然简单,却非常有用,让我们来看一些 Android 开发例子。 你可以官方文档中了解更多关于委托属性内容。...所以让我们来写一个扩展函数用于往Bundle 存储某种类型值,类型不支持时候抛出异常。...这个委托也可以使用相同键来SharedPreferences存储属性新值。 为了让我们例子能工作,我们还需要为String?...Kotlin Android Extension视图绑定来获取布局控件。...总结 我们看来一些 Android 开发中使用 Kotlin 委托属性例子。当然了,你也可以用别的方式来使用它。 这篇文章目标是展示委托属性是多么强大,以及我们可以用它做什么。

4.5K41

Kotlin扩展函数属性示例详解

前言 Kotlin 扩展方法并不是原类内部进行拓展,通过反编译为Java代码,可以发现,其原理是使用装饰模式,对源类实例操作和包装,其实际相当于我们 Java定义工具类方法,并且该工具类方法是使用调用者为第一个参数...,然后工具方法操作该调用者; 理论上来说,扩展函数很简单,它就是一个类成员函数,不过定义外面。...Kotlin允许用和导入类一样语法来导入单个函数: import strings.lastChar //星号导入 import strings.* 3.3.2Java调用扩展函数 其实,扩展函数是静态函数...假设它声明一个叫做StringUtil.kt文件: char c = StringUtil.lastChar("Java"); 和Kotlin版本比较起来,可读性略差。...3.3.4不可重写扩展函数 扩展函数并不是类一部分,它是声明类之外。扩展函数并不存在重写,因为Kotlin会把它们当做静态函数对待。

1.3K20

Kotlin 扩展函数和扩展属性使用方法

Kotlin 能够扩展一个类新功能而无需继承该类或者使用像装饰者这样设计模式。 这通过叫做 扩展 特殊声明完成。 例如,你可以为一个你不能修改、来自第三方库类编写一个新函数。...Utils.dp2px(100) 来使用, val dp2px = Utils.dp2px(100) 如果用kotlin扩展函数方式来实现,会是怎么调用呢?... Android Studio ,我们可以查看 kotlin 文件字节码,然后再 Decompile 为 Java 代码。上面我们为 Person 扩展函数转为Java代码后如下。...因为将一个 Person 作为入参传入了方法,所以我们也就可以方法内对这个 Person 对象进行操作,这也就是扩展方法我们可以使用 this 来访问 Person 属性原因。...总结 Java ,我们要扩展一个类时,常常是继承该类或者用装饰者模式类似的设计模式来实现,Kotlin 扩展函数和扩展属性为这种需求提供了一种新思路,并且也可以作为 Utils 类另外一种选择

2.5K40

js 构造函数构造函数作用,构造函数和普通函数区别

构造函数 JavaScript ,用 new 关键字来调用函数,称为构造函数构造函数首字母一般大写(规范)。...之所以有构造函数与普通函数之分,主要从功能上进行区别的,构造函数主要 功能为 初始化对象,特点是和new 一起使用。new就是创建对象,从无到有,构造函数就是在为初始化对象添加属性和方法。...使用对象字面量创建一系列同一类型对象时,这些对象可能具有一些相似的特征(属性)和行为(方法),此时会产生很多重复代码,而使用构造函数就可以实现代码复用。...(ES6 class 与构造函数关 系,通过class定义类 和通过构造函数定义类 二者本质相同。并且js执行时,会将第一种转会为第二种执行。...所以 ES6 class写法实质就是构造函数) 4、内部用this 来构造属性和方法 5、构造函数执行流程 A、立刻在堆内存创建一个新对象 B、将新建对象设置为函数this C、

3.4K10

Kotlin函数

例子如下: Android开发,打印信息 //通过关键字inline来定义内联函数。 //泛型 reified关键字告诉编译器,这个泛型是可以具体拿到值泛型。...这里等待后面具体来看什么时候非内联 Kotlin ,我们可以只使用一个正常、非限定 return 来退出一个命名或匿名函数。...如果一个函数只有一个表达式,则可以直接写"=" fun double(x:Int):Int=x*2 局部函数 Kotlin 支持局部函数,即一个函数另一个函数内部。... Kotlin 中有一个约定,如果函数最后一个参数是一个函数,并且你传递一个 lambda 表达式作为相应参数,你可以圆括号之外指定它: lock (lock) { sharedResource.operation...可以实现dsl风格代码全靠它 Kotlin 提供了使用指定 接收者对象 调用函数字面值功能。 可以调用该接收者对象上方法而无需任何额外限定符,可以任意调用接受者方法和属性

2.3K40

构造函数方法与构造函数prototype属性上方法对比(转)

使用函数方法我们可以访问到函数内部私有变量,如果我们通过构造函数new出来对象需要我们操作构造函数内部私有变量的话, 我们这个时候就要考虑使用函数方法. prototype上方法: ...这种情况下我们代码内存占用就比较小. 实际应用,这两种方法往往是结合使用;所以我们要首先了解我们需要是什么,然后再去选择如何使用....需要指出是,通过这两个构造函数new出来对象具有一样属性和方法,但是它们区别我们可以通过下面的一个图来说明: image.png 我们通过使用构造函数A创建了两个对象,分别是a1,a2;通过构造函数...定义构造函数内部方法,会在它每一个实例上都克隆这个方法;定义构造函数prototype属性方法会让它所有示例都共享这个方法,但是不会在每个实例内部重新定义这个方法....如果我们应用需要创建很多新对象,并且这些对象还有许多方法,为了节省内存,我们建议把这些方法都定义构造函数prototype属性上 当然,某些情况下,我们需要将某些方法定义构造函数,这种情况一般是因为我们需要访问构造函数内部私有变量

1.1K30

android怎么View构造attrs拿到android给属性以及attrs属性介绍

一、 首先要在res/values目录下建立一个attrs.xml(名字可以自己定义)文件,并在此文件增加对控件属性定义.其xml文件如下所示: <?...,即Attr属性是如何在XML定义,自定义属性Value值可以有10种类型以及其类型组合值,其具体使用方法如下: 1. reference:参考某一资源ID。...= "@drawable/图片ID|#00FF00" /> 二、接下来实现自定义View类,其中下面的构造方法是重点,代码获取自定义属性,其代码如下: package com.example.CustomAttr...四、总结: 注意该例子使用app:text_size = "20 和app:text_color="#00FF00定义TextView颜色和textView字体大小,而不是使用系统属性android...该例子只是起到抛砖引玉作用,你可以自定义其他属性,来实现你想要自定义View效果。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

1.1K110

Kotlin:关键字之lateinit

Kotlin定义变量或者属性都是需要初始化值,并且其都是private,但是有些时候对于变量或者属性只需要声明,但是不需要初始化,则kotlin提供了lateinit关键字来实现: class...:Int = 0 } 从上图可以看出编辑器所出现错误可以总结出在使用lateinit是需要注意事项: lateinit 对应使用var来声明属性 lateinit 不可以修饰原始数据类型(byte...(我们可以尝试使用某种单独标记,但是通过反射初始化字段时不会更新该标记,这是 lateinit 主要用例)。...因此,仅对象类型属性支持 lateinit 但是 lateinit 是一个坑,对于新手来说还是一个不小 Kotlin 代码慎用 lateinit 属性 这位作者解释很清楚了 对于 Kotlin...新手来说,应该抛开 Java 式写法,牢记类属性三种初始化方式: 主构造函数内定义属性使用传入参数初始化属性; 类体内定义属性,同时初始化; 类体内定义属性,init 块里初始化。

90320

Kotlin延迟属性(lazy properties)

属于Kotlin委托属性这一章标准委托 延迟属性Lazy lazy() 是接受一个lambda 并返回一个 Lazy 实例函数,返回实例可以作为实现延迟属性委托。...,将对代理实例引用存储类对象,并为与委托实例一起使用属性生成getter。...除了val之外,lateinit不能用于可空属性和Java原语类型(这是因为null用于未初始化值);所以如果你需要在类存在支持字段,请使用lateinit; lateinit var可以从对象被看到任何地方被初始化...如果您希望以预先未知方式从外部初始化属性,请使用lateinit。...延迟属性Lazy 与 lateinit 使用总结 lateinit用于外部初始化:当需要外部资料通过调用方法初始化您值时。

3.4K30

浅谈Kotlin函数

4.顶层函数 不同于Java函数只能定义每个类里面,Kotlin采用了JavaScript 做法,可以文件任意位置处定义函数,这种函数称为顶层函数。...5.扩展函数 扩展函数是类一个成员函数,不过定义外面 扩展函数不能访问私有的或者受保护成员 扩展函数也是编译成静态函数 所以可以Java库基础上通过扩展函数进行封装,假装好像都是调用Kotlin...自己库一样,KotlinCollection就是这么干。...,这样就可以直接通过list进行调用, 扩展函数里面照常可以使用this,这里this就是指向接收者对象,在这里就是list。...,Java可以抽取出独立函数,但这样有时候对整体结构并不太好,Kotlin提供了局部函数来解决这个问题。

2.5K20

Kotlin内联函数

Kotlin内联函数还是挺好玩 为什么需要内联函数? lambda 表达式会被正常地编译成匿名类。这表示每调用一次 lambda表达式,一个额外类就会被创建。...并且如果 lambda捕捉了某个变量, 那么每次调用时候都会创建一个新对象。 这会带来运行时额外开销,导致使用 lambda 比使用一个直接执行相同代码函数效率更低 。 内联函数作用是啥?...内联函数使用 inline 修饰符标记,内联函数使用时候编译器并不会生成函数调用代码,而是使用函数实现真实代码替换每一次函数调用 内联函数如何运作?...Int、Long、Double都继承自Number,但是,如果我们调用上面的函数时,传入了Array,这样是会报错!!...因为 kotlin调用函数时要求参数类名必须完全一致!! 对于上面的函数,如果我们想既可以接收 Array, 也可以接收Array, 那么就可以定义一个具体化类型参数内联函数.

1.5K20

KotlinKotlin继承 一 ( 类继承基本方式 | final 关键字 | 子类主构造函数 | 子类次构造函数 )

使用 final 禁止类继承 / 方法重写 III . 父类没有主构造函数 IV . 父类有主构造函数 V . 父类构造函数与子类构造函数总结 I . 类继承基本方式 ---- 0 ....类继承格式 : 使用 " : " 继承父类 ; 如果该父类有主构造函数 , 那么子类必须至少有一个主构造函数或次构造函数 , 子类构造函数下面会根据不同情况详细解析 ; //注意这里父类构造函数需要实际调用...子类有主构造函数 : 父类必须在主构造函数初始化 , 子类 constructor() 可以省略 ; " : " 后 Father() 相当于调用了父类构造函数 , 将子类构造函数委托给父类构造函数执行...子类有主构造函数 : 子类需要在主构造函数定义需要变量 , 其中参数 , 可以直接传递给后面委托调用构造函数 ; class Son constructor (name : String, age...子类没有主构造函数 : 如果没有主构造函数 , 那么子类必须有次构造函数 , 子类需要在次构造函数定义需要变量 , 其中参数 , 可以直接传递给后面 super ( ) 委托调用构造函数 ;

1.2K10

Kotlin 机制你都了解吗?

kotlin 中有多少种构造函数 ---- kotlin构造函数分为了两种: 主构造函数和次构造函数。...,如果我们想在主构造函数写一些逻辑,怎么办呢, kotlin 给我们提供一个 init 结构体,所有构造函数逻辑都可以写在里面: class Person(val name: String, val...某个类,如果某些成员变量没办法一开始就初始化,并且又不想使用可空类型(也就是带?类型)。那么,可以使用 lateinit 或者 by lazy 来修饰它。...可以使用 @JvmField 和 @JvmStatic 类似于 Java 调用静态属性和静态方法; 伴生对象可以扩展属性和扩展方法。...首先伴生对象代码是类加载时就会执行。init代码块方法会按顺序放在主构造函数,主构造函数中原来代码会在后面执行。 9. const 和 val 有什么区别?

76030

dotnet 谨慎静态构造函数使用

dotnet 最佳实践里面,不推荐静态构造函数里面包含复杂逻辑,其中也就包含了本文聊和多线程相关使用。最佳做法是尽量不要在静态构造函数里面碰到任何和锁以及多线程安全相关逻辑。...本文来告诉大家,静态构造函数里面使用锁将带来问题以及原因 .NET 设计里面,一个类型静态构造函数,是在此类型第一次被碰到时将会被 CLR 调用。...当然,这是有例外,由于 .NET 里面,无论是静态构造函数还是实例构造函数,都是一个函数方法,通过反射,依然可以当成基础方法调用,因此使用反射时,以上说法是不成立 使用反射黑科技下,保持让构造函数只能由一个线程执行... this 就分别属于不同两个对象 然而静态构造函数就比较复杂起来,大家都知道,没有标记线程静态前提下,所有的静态字段和属性等都是全局共享,全局共享就意味着所有的线程都访问到相同对象...静态构造函数里面使用锁将违背锁最佳实践里面的确定性调用这一条,静态构造函数类型第一次碰到时被触发,也就是开发者是无法确定静态构造函数合适被调用

58410

java构造函数调用另一个构造函数_java构造函数

参考链接: Java程序从另一个调用一个构造函数 package demo03; /*  * 构造方法是专门用来创建对象方法,当我们通过关键字new来创建对象时,其实就是调用构造方法  * 格式:... * public 类名称(参数类型 参数名称){  *         方法体  *   * }  * 注意事项:  * 1.构造方法名称必须和所在类名称完全一样,就连大小写也要一样  * 2.构造方法不要写返回值类型...,连void都不写  * 3.构造方法不能return一个具体返回值  * 4.如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,方法体什么都不做  * 5.一旦编写了至少一个构造方法...,那么编译器将不再赠送  * 6.构造方法也是可以进行重载。  ...:"+stu2.getName()+"年龄是:"+stu2.getAge());         //如果需要改变对象当中成员变量数据内容,仍然还需要使用setXxx()方法         stu2

4.4K60

Kotlin实体类创建方式

= '1' } 补充知识:Kotlin类、构造器、对象 1.Kotlin定义 类构成: 类构成由构造函数和初始化代码块、属性(字段)、函数(方法)、内部类(嵌套类)、对象声明五部分组成 /.../** * 构造器 constructor Kotlin中有一个主构造函数和多个二级构造函数 * 主构造函数是类头一部分,跟在类名后面 * Java构造方法必须和类名相同,而在Kotlin...: String private var age: Int //Kotlin使用init初始化代码块,它作用是为了主构造函数服务,由于主构造函数是放在类首部,是不能包含任何初始化执行语句...val age: Int){} //次构造函数,与主构造函数区别就是,次构造函数定义,可以有多个,但是主构造函数只会有一个 class Users{ private val username...基本类型 //因为Kotlin使用null来对每一个用lateinit修饰属性做初始化,而基础类型是没有null类型,所以无法使用lateinit

3.9K10

最强总结 | 带你快速搞定kotlin开发(上篇)

val可以理解为Java属性声明加上了final关键字(将kotlin字节码反编译成Java一看就知道了),其实kotlin是更倾向于推荐使用val来声明变量,这是一种防御性编码思维模式,目的是减少程序出错或者变更加安全...age: Int = 0 } // 当你构造函数调用父类构造函数时,要去掉Person后面的() class Man: Person { // 使用super调用父类构造器 constructor...但是只能在以下场景下使用: var声明变量 lateinit修饰变量不可空、不能是基本数据类型、不能有初始值 构造初始化变量不需要使用lateinit关键字 1.6 类型判断 if(p is...age属性也是可以使用@JvmField注解: // kotlin class Person: Any { // kotlin构造函数使用constructor关键字 constructor...Java中使用类名+Kt后缀直接访问 PersonKt.getSomething(); // kotlin文件调用更加方便,只需要导包,不需要加类名 // 但是这种方式并不有利于阅读,会和类函数搞混淆

52910
领券