kotlin记录

简介:

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。

Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。

在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言


优势:

简洁大大减少样板代码的数量。

安全:避免空指针异常等整个类的错误。

互操作性: 充分利用 JVM、Android 和浏览器的现有库。

工具友好: 可用任何 Java IDE 或者使用命令行构建。


【类型自动推断;避免空指针闪退;支持协程和函数式编程等等】

模块

1、基础语法

2、基本数据类型

3、条件控制

4、循环控制

5、类和对象

6、继承

7、接口

8、数据类

9、范型

10、枚举类

11、对象表达式/声明

12、密封类

13、委托


一、基础语法

1、变量与常量

变量通过var关键字定义,常量通过val关键字定义.既支持类型推倒也支持显示声明类型.这样的话定义变量和常量写起来会比java简洁一些:

var varInt =1;//通过赋值可以自动推断出变量类型

var stringVar:String ="智慧培森"//显示声明变量类型

val STUDENT_ACTION ="UPDATA_STUDENT"//使用val关键字定义常量

2、类

kotlin 中通过class关键字定义类,支持在主构造函数中用var或者val直接定义成员变量:


类结构体中定义成员变量

3、数据类

在kotlin中我们可以用data class 定义单纯只是保存数据的数据类:

java中没有专门的数据类,通常是通过JavaBean来做数据类,但Kotlin中使用了专门的数据类。

Kotlin中数据类是只保存数据的类,类中的标准函数往往是从数据机械性推导而来的。

Kotlin可以创建只包含数据的类即数据类,数据类使用关键字data标记。

data class Person(var name: String,var age:Int)

4、object 对象

object 对象在多种情况下出现,但是它都遵循同一个理念,这个关键字定义一个类,并同是创建一个实例(类对象)

单例中的应用

kotlin 实现

对比java 实现

根据kotlin 的单例实现,查看字节码反编译后,写法和java 实现饿汉单例是一样的

Kotlin中类没有静态方法。如果你需要写一个可以无需用一个类的实例来调用,但需要访问类内部的函数(例如,工厂方法,单例等),你可以把该类声明为一个对象。该对象与其他语言的静态成员是类似的。学习更多

伴生对象

Kotlin 中,在类中定义的对象(object)声明,可使用companion修饰,这样此对象(object)就是伴生对象了。但是一个类(class)中最多只能定义一个伴生对象。

使用companion关键字修改的对象之后,伴生对象就相当于是外部类的对象,我们可以使用类直接调用

通过上面的看出来,类似于 Java 中使用类访问静态成员的语法。因为 Kotlin 取消了 static 关键字,所以 Kotlin 引入伴生对象来弥补没有静态成员的不足。可见,伴生对象的主要作用就是为其所在的外部类模拟静态成员。

5、函数定义

函数定义使用关键字 fun,参数格式为:参数 : 类型

表达式作为函数体,返回类型自动推断:

长参数:(类似java String... args)

6、字符串模板

${变量名}

7、NULL检查机制

kotlin 的空安全设计,对声明可以为空对变量,使用的时候要做空判断处理。

Kotlin将变量分为可以为Nullable类型 Non-Null类型,变量在声明时就要确定属于哪个阵营。

变量默认Non-Null类型,如果想声明Nullable的变量,需要用“?”修饰

声明Non-Null变量

声明Nullable变量

声明变量时若直接赋值,变量类型由赋值的类型决定

Non-null 类型变量不能赋值为null

如何把nullable 类型的变量赋值给non-null类型的变量,加!!

Nullable 变量使用,“?”符号使用

nullalbe 变量进行操作时,要加?,当变量为空时不会报错,返回null

“?:”符号使用。这个符号的作用是左边为空时,进行右边操作


二、基本数据类型

1、Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型。详情请看

取值范围

整数

浮点数

2、比较两个数

kotlin 中没有基础数据类型,只有封装的数字类型,每定义一个对象,kotlin 就帮我们封装了一个对象,这样可以保证不会出现空指针,所以比较两个数字的时候,就有比较两个数值大小和对象是否相等

3、数组

数组用Array 实现,并且还有一个size 属性和get、 set方法,[ ]重载了get 、 set 方法,所以可以通过下标很方便的获取或者设置对应位置的值

数组的两种创建方式:arrayof();工厂函数

三、条件循环

kotlin 条件控制


把 IF 表达式的结果赋值给一个变量。

使用区间

使用in运算符判断某个数字是否在某段区间内,区间格式x..y

四、循环控制

for 循环可以对任何提供迭代器(iterator)的对象进行遍历,语法如下:

for (item in collection) print(item)

如果你想要通过索引遍历一个数组或者一个 list,你可以这么做:

for (i in array.indices) { 

     print(array[i])

}

或者你可以用库函数 withIndex:

for ((index, value) in array.withIndex()) { 

 println("the element at $index is $value")

}


五、类和对象

1、Kotlin 类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明。

Kotlin 中使用关键字class声明类,后面紧跟类名:

class Runoob { 

 // 类名为 Runoob // 大括号内是类体构成

}

2、属性定义

类的属性可以用关键字var声明为可变的,否则使用只读关键字val声明为不可变。

class Runoob {

 var name: String = …… 

 var url: String = …… 

 var city: String = ……

}

3、使用构造函数创建类实例

val site = Runoob() // Kotlin 中没有 new 关键字

要使用一个属性,只要用名称引用它即可

site.name // 使用 . 号来引用

site.url

4、Koltin 中的类可以有一个 主构造器,以及一个或多个次构造器,主构造器是类头部的一部分,位于类名称之后:

class Person constructor(firstName: String) {}

如果主构造器没有任何注解,也没有任何可见度修饰符,那么constructor关键字可以省略。

class Person(firstName: String) {}


5、getter 和 setter

getter 和 setter 都是可选,val不允许设置setter函数,因为它是只读的。

Kotlin 中类不能有字段。提供了 Backing Fields(后端变量) 机制,备用字段使用field关键字声明,field 关键词只能用于属性的访问器



六、

你可能感兴趣的:(kotlin记录)