kotlin开发基础(代码片段)

wx_962464 wx_962464     2023-03-31     433

关键词:

想第一时间获取我的最新文章,请关注公众号: 技术特工队

本篇文章主要介绍类的属性定义及getter和setter,构造器,主次构造函数相关知识。

声明

类使用 class 关键字来标识,这个与Java中一样的。但是在kotlin中默认类都是不可继承的,也就是所说的 final 的类型,如果需要别继承,则必须将其标记为 open 或者 abstract 类型。

可见性声明

Kotlin 一共有四种可见性修饰符:private、protected、internal、public
可见性修饰可用于函数、属性、类、对象和接口,但不能用于局部变量。
如果没有显式指定修饰符的话,默认可⻅性是 public 。与Java中默认类型不同。

类属性

getter/setter及filed关键字

在Kotlin中对于 var 的变量都会默认有 settergetter 方法,对 val 的仅有 getter 方法,当然也可以复写 gettersetter 方法,一般写法如下:

var <propertyName>[: <PropertyType>] [= <property_initializer>]
    [<getter>]
    [<setter>]

值得注意的是,在复写getter和setter时,新手很容易犯的一个错,请看如下代码:

class Person 
    var age: Int
        get() = age
        set(value) 
            age = value
        

上面的代码编译期间是没有任何问题,但是运行起来呢?发现发生了StackOverflowError。。。怎么会是这么个鬼错误。这么简单的代码还能写错?这里教大家一个展示转为Java的方法。通过 Tools —> Kotlin —-> Show kotlin ByteCode ,这里转出来是字节码,很难看,然后在对话框上面在点击 DeCompile 这样就出现Java代码了,看看上面的代码生成了什么?

public final class Person 
   public final int getAge() 
      return this.getAge();
   

   public final void setAge(int value) 
      this.setAge(value);
   

上面的 gettersetter 方法都调用的是自己的方法。所以就发生 StackOverflowError 的错误了。这怎么办?Kotlin官方也意识到这个问题啦,便有了field 关键字啦。
正确写法如下:

class Person 
    var age: Int = 0
        get() = field
        set(value) 
            field = value
        

这样的写法请自行转换为java代码看看是什么代码。

  • field标识符只能用在属性的访问器内。
lateinit关键字

由于Kotlin默认是不允许为空的,所以在声明变量时,必须对其进行赋值,但是有些时候,我们确时无法在一开始定义的时候就赋值,这时候就需要延迟赋值。这时就用 lateinit 关键字进行标记。
示例如下:

lateinit var ageStr: String

注意:
1. lateinit 只能对 var 类型的变量
2. lateinit 不能用于基础类型,因为基础类型没有null的情况

构造

Kotlin中的类需要构造函数时,可以有一个主构造函数和多个次构造函数,当然也可以没有构造函数。

主构造函数

主构造函数在类名后。
写法如下:

class Person(name: String) 
    /// some code ****

如果类中没有任何的代码时,则可以省略最后面的括号写法如下:

class Person(name: String) 

当构造函数有注解或者可见性修饰符时,构造函数需要加constructor关键字,如下:

class Person private constructor(name: String) 

private 指的是构造方法为private 类型。

由于主构造函数中是不能有代码块的,如果想要在构造函数中有代码块,则必须使用init语句块,将初始话语句写在init代码块中,代码块中可以访问到构造函数的属性,并执行一些语句块,示例如下:

class Person(name: String) 
    private var mName: String
    init 
        println("init")
        mName = name.toUpperCase()
    

当在构造函数中的参数名前加上 varval 则表示此参数为类的一个成员变量。并且会自动会在构造函数中对其进行赋值,默认也会为其生成getset 方法。不想对外访问则添加private修饰符即可。
示例代码如下:

//会自动生成private name:String的类属性,且生成get方法(没有set因为是val的类型)
class TestClass(val name:String) 
    fun test() 
        Log.v("TestClass","name = $name")
    

//下面是外部不可以访问name属性的
class TestClass(private var name:String) 
    fun test() 
        Log.v("TestClass","name = $name")
    

二级构造

二级构造函数,也称为次级构造函数。关于二级构造函数,主要有以下几点:
- 次级构造函数不能省略 constructor 关键字;
- 当类拥有主构造函数时,任何一个二级构造函数都需要直接或间接通过另一个二级构造函数代理主构造函数;
- 类中的一个构造函数代理另一个构造函数,需要使用关键字this;

示例如下:

class Person constructor(id: Int) //(构造函数No.0)主构造函数
    var id = id//主构造函数初始化id
    var name = ""
    var age = 0
    //(构造函数No.1)直接代理主构造函数
    constructor(name: String, id: Int) : this(id) 
        this.name = name
    
    //(构造函数No.2)代理了构造函数No.1,间接代理主构造函数
    constructor(name: String, age: Int, id: Int) : this(name, id) 
        this.age = age
    

这类补充子类的次构造函数是无法直接代理到父类的方法。必须指向本类的主或次构造函数,但最终都必须指向主构造函数。

总结

Kotlin 中的对一个类的声明比 Java 简单了很多,代码量也少了很多,尤其是对于数据类来说, 从这来看 Kotlin 的语法是比 Java 简洁了很多,节省码代码的时间。

kotlin开发基础从0开始(代码片段)

作者:Aaron主页:http://www.wxtlife.com/2017/09/08/kotlin-share-1/微信文章:https://mp.weixin.qq.com/s/tX4dVIa3KCgdHwPA-0hY8A如果想加入Android技术交流群,请长按识别二维码关注下方公众号,点击“加群”获取加群方式。欢迎订阅 查看详情

android:kotlin详细入门学习指南-基础语法(代码片段)

Android:Kotlin详细入门学习指南-基础语法(一)本人也是在初学Kotlin,如有错误,请帮忙指出,持续更新Kotlin被Google官方认为是Android开发的一级编程语言自2019年GoogleI/O以来,Kotlin就成为了Android移动开发的首选。... 查看详情

kotlin基础一:string模板(代码片段)

开发工具:因为本人从事Android开发,所以直接使用Androidstudio,版本4.0.1。funmain(args:Array<String>)varname="chen"println("$nameeatsomething")点击Run "StringTemplateKt"按 查看详情

android开发基础——kotlin简介(代码片段)

什么是KotlinJava代码在运行前需要编译生成一种特殊的class文件,然后Java虚拟机会识别并解释这些class文件,而Kotlin作为一种新的编程语言,就是将其代码同样编译生成为这样的class文件,也就是说,虽然看起来... 查看详情

kotlin开发基础(代码片段)

...一时间获取我的最新文章,请关注公众号:技术特工队Kotlin开发基础(一)Kotlin开发基础(二)Kotlin开发基础(三)类本篇文章主要介绍类的继承,接口,复写,单例,以及object属性的介... 查看详情

kotlin开发基础(代码片段)

...一时间获取我的最新文章,请关注公众号:技术特工队Kotlin开发基础(一)Kotlin开发基础(二)Kotlin开发基础(三)类本篇文章主要介绍类的属性定义及getter和setter,构造器,主次构造函数相关... 查看详情

kotlin基础学习(代码片段)

...就对这本书进行了学习。在这本书中,由于谷歌大力推广kotlin语言,将其作为android开发的首推语言,本书也遵循了谷歌的推广,因此我就跟着书本学习了基本的Kotlin语法,当作记录笔记了。变量和函数变量在Koltin中的变量定义... 查看详情

kotlin基础语法学习笔记(代码片段)

Kotlin简介Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度... 查看详情

android开发语言——kotlin学习笔记(代码片段)

Kotlin本Blog是我学习《Android第一行代码-第三版》的学习笔记,将会不定期断更持续更新。(默认大家都和我一样学过C++或Java的基础语法)。Kotlin简介在Android诞生的前几年中,Java一直是Android的主要开发语言。在2017年&#... 查看详情

kotlin基础学习(代码片段)

学!文章目录Kotlin变量lateinit延迟初始化空安全DataClasses静态内部类实现Kotlin只要学,啥时候都不晚!这里主要介绍从java转到kotlin中一些常见的基础学习读完这篇文章你应该能很快适应kotlin的开发节奏了内容不断补充... 查看详情

kotlin开发基础从0开始(代码片段)

作者:Aaron主页:http://www.wxtlife.com/2017/09/08/kotlin-share-1/微信文章:https://mp.weixin.qq.com/s/tX4dVIa3KCgdHwPA-0hY8A如果想加入Android技术交流群,请长按识别二维码关注下方公众号,点击“加群”获取加群方式。欢迎订阅... 查看详情

kotlin基础range(代码片段)

a=1..10//[1,10]b=1unitl10//[1,10)  查看详情

kotlinflow响应式编程,基础知识入门(代码片段)

...微信搜索郭霖即可关注,每个工作日都有文章更新。Kotlin在推出多年之后已经变得非常普及了。相信现在至少有80%的Android项目已经在使用Kotlin开发,或者有部分功能使用Kotlin开发。关于Kotlin方面的知识,我其实分享... 查看详情

字节内部超全kotlin学习笔记,快速上手kotlin开发,基础+实战+源码,手把手带你吃透kotlin语法与协程。(代码片段)

目前市面上主流的App和库,大都是使用Kotlin语言开发的,在PlayStore的前1000个应用程序中有80%以上使用Kotlin。这也意味着,对于Android应用开发者来说,仅仅掌握Java是不够的,你还应该学习Kotlin,才能追上技... 查看详情

markdown[kotlin基础知识]#android(代码片段)

查看详情

kotlin基础判断是否null写法优化(代码片段)

判断是否null写法优化->返回总目录<-kotlin代码举例子: vararray=arrayListOf(null,"2","3")if(array[0] 查看详情

kotlin基础学习(代码片段)

学!原文:https://blog.csdn.net/CrazyApes/article/details/122091459文章目录Kotlin线上编写变量lateinit延迟初始化空安全比较==,===,equalsfor循环when[Dataclasses](https://kotlinlang.o 查看详情

kotlin基础语法(代码片段)

一.Kotlin基本数据类型1.Kotlin的基本数值类型包括Byte、Short、Int、Long、Float、Double等。不同于Java的是,字符不属于数值类型,是一个独立的数据类型,eg:如下表类型位宽度占用字节数Double648Float324Long648Int324Short162Byte81数据类... 查看详情