在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言,Kotlin语言被赞誉为Android世界里的Swift,简单概括就是:
- 完全兼容Java
- Null safe
- 支持lambda表达式(比Java8更好)
- 支持扩展
- 跨平台开发
- 开源
- 语法简洁
- 类型推断
- 体验一致的开发工具链
当然,也给Google免去了许多因为java而产生的纠纷
Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。
1、问号表达式:
- 2 > 1 ? a : b (判断成立,则结果为a,不成立则结果为b)
2、判空表达式:
- a ?: b (a成立则结果为a,a不成立则结果为b)
![](https://img.haomeiwen.com/i15368151/46cda14e4f35a060.png)
判断范围:
![](https://img.haomeiwen.com/i15368151/bb708592c0c9d14c.png)
when语句赋值:
![](https://img.haomeiwen.com/i15368151/2a62a10af1393f9f.png)
for循环:
![](https://img.haomeiwen.com/i15368151/374839eaea8598c6.png)
![](https://img.haomeiwen.com/i15368151/038dd16e8b0eb59f.png)
![](https://img.haomeiwen.com/i15368151/425d0973103fbeeb.png)
Kotlin语法:
1、重写方法必须以override开头进行标识
2、类和方法默认都是不能被重写的,要重写必须以open开头进行标识
3、支持单继承,用:连接要继承的父类
4、类的三大特性:封装 、继承、多态
多态:
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。对不同类的对象发出相同的消息将会有不同的行为,多态在接口中的实现(统一接口):
![](https://img.haomeiwen.com/i15368151/5b7ef10ca80e3644.png)
![](https://img.haomeiwen.com/i15368151/c0f4fa89639391d7.png)
![](https://img.haomeiwen.com/i15368151/cbe5743c7174d43a.png)
属性:
1、kotlin类的属性声明的时候必须初始化
![](https://img.haomeiwen.com/i15368151/b17526489a068a92.png)
2、属性的变量在声明时默认提供set、get方法,可以重写setget方法,如果不想要set或get方法:
![](https://img.haomeiwen.com/i15368151/57886fed9e295ee9.png)
3、在变量后面加 ?,表示可空
![](https://img.haomeiwen.com/i15368151/889eaab38e2fb60e.png)
4、懒加载:
定义了一个变量,但是在定义时并没有值,在被访问的时候才有值
![](https://img.haomeiwen.com/i15368151/1490660acd2929d3.png)
延迟加载:
一个变量肯定有值,但是不知道什么时候会有值,可以使用延迟加载;但是必须在某个时刻被初始化:
![](https://img.haomeiwen.com/i15368151/7ed8c0a588bf25ed.png)
函数:
Unit:跟java中的void类似,表示返回值为空
class a( a: Int) 与class a(val a: Int)的区别:
class a(a: Int)就是给a类传递一个参数;而class a(val a: Int)相当于给 a
类定义了一个属性,内部、外部都可以访问
抽象类:
![](https://img.haomeiwen.com/i15368151/5d9c72216e5c6796.png)
- 抽象方法、抽象属性在抽象类中不实现和初始化
- 抽象类的属性和方法默认是open的(要用open修饰)
![](https://img.haomeiwen.com/i15368151/cce73232efa03645.png)
![](https://img.haomeiwen.com/i15368151/5f58a286f92a0cd3.png)
反射:
只知道一个类的名字、方法名、属性名,进而调用其具体功能
反射的具体规则需要自己创建
![](https://img.haomeiwen.com/i15368151/ca7c7945b347821c.png)
![](https://img.haomeiwen.com/i15368151/873e2e9062f2f559.png)
![](https://img.haomeiwen.com/i15368151/6434e851dbd0ecb4.png)
注解(annotation):
annotationTarget(注解对象):
class 类
constructor 类的构造函数
property 属性
file 文件
function 函数
VALUE_PARAMETER函数的参数
注解三个值对应的作用域:
![](https://img.haomeiwen.com/i15368151/74ab503313cc58fe.png)
- constructors函数:构造对象的函数,但是被创建对象的类必须提供一个没有参数的constructors构造函数
-
参数的属性:index name type
image.png
协程的优点:
1.很容易离开主线程。我们试过很多方法来让操作远离主线程,AsyncTask、Loaders、Executorservice …甚至有开发者用到了RxJava。但协程可以让开发者只需要一行代码就完成这个工作,而且没有累人的回调处理。
2.样板代码最少。协程完全活用了Kotlin语言的能力,包括suspend方法。编写协程的过程就和编写普通的代码块差不多,编译器会帮助开发者完成异步化处理。
3.结构并发性。这个可以理解为针对操作的垃圾搜集器,当一个操作不再需要被执行时,协程会自动取消它。
- 协程:内部实现是线程,是多线程的一个顶层封装,可以自动实现线程的切换,代码可以按照正常的顺序书写
- 回调:可用于线程之间交换数据(线程与线程之间相互独立)
- 进程:正在运行的程序就是一个进程,用来管理程序运行中需要的资源
- 线程:进程中真正执行任务的最小单位
- 如果有任务需要花费大量时间→选择创建独立的线程来执行这个任务
线程的缺点:
线程与线程之间通信
线程依赖
线程切换
java中UI线程为主线程,也只有主线程才能操纵UI界面
- 当主线程运行结束时,其子线程还没有结束,此时子线程就没有意义了
网友评论