1、为什么使用Kotlin开发Android呢?
java被 Oracle收购后,谷歌经常被Oracle告侵权,所以谷歌选择了Kotlin作为Android开发的第一语言,在Android官网上 说Kotlin是免费且开放的,是由一家特别厉害的公司JetBrains开发的静态编程语言,AndroidStudio也是根据他家的IDEA改的,谷歌也贡献了开源代码
Kotlin的优点:
富有表现力且极简洁
Kotlin 的现代语言功能让您可以专注于表达自己的想法,少编写样板代码。
更安全的代码
借助自身类型系统所含的 @Nullable 和 @NonNull,Kotlin 可帮助您避免 NullPointerExceptions。使用 Kotlin 的 Android 应用发生崩溃的可能性降低了 20%。
可互操作
可以和Java代码互通,互相调用
结构化并发
Kotlin 协程可简化异步编程,让您能够轻松高效地执行网络调用和数据库更新等常见任务。
2、基础语法
2.1、变量
类型推导 根据初始化的类型进行类型推导
可变变量定义 var
不可变变量定义val 相当于java的final修饰
Kotlin是一个静态语言 ,编译期就决定的东西
decompiledJava(用插件先把Kotlin转为字节码,再反编译成java文件)后的代码
由以上代码可以看出var转为java之后是有get和set方法的,而val用了final修饰之后并且没有set方法,说明了用var修饰的变量可读可写,用val修饰的变量可读不可写
2.2、函数
不带返回值的方法void==Unit 可以省略
有返回值返回值 和参数的方法
一种更高级的写法
方法 = 推导返回值类型
java里可以有可变参数,Kotlin里也有需要用vararg 关键字来修饰
可变参数(可变长的参数)
lambda表达式函数(这里先举个例子,以后专门写个文章来学习lambda)
2.3、字符串模板
写起来会快一点
三个双引号,原样输出,换行不需要转义字符,
trimIndent()去掉前置空格,具体什么效果大家可以敲一敲 去试试
显示$999.99
2.4 、Kotlin特色之一 null检查机制
一共三种补救措施
第一种就是方法内允许返回空值,在返回值返回的后边加一个?,这样的话就将补救措施交给了返回值的调用者
这种写法testStr.length报的错误和上面一样的,如果把test方法返回值的?去掉,则这个方法是不允许返回null的,testStr.length是不会报错的
第二种补救措施
调用的这个属性的时候,点前边加一个?,表示如果这个属性为null,则后边的代码不执行
第三种补救措施在调用的时候,点前面加两个!!,表示这个属性一定不为null,后面的一定执行
第三种补救措施一定要慎用,在确定这个属性为百分之百不为null的情况下可以这样用,否则会出现空指针异常的情况
2.5、区间
输出结果:
3、比较与数组
==比较值本身相当于,equals也能用,但是有黄色波浪线
===比较对象地址
数组 arrayOf泛型 类型推导
也可以这样写
decompiledJava后的代码
4、条件控制
表达式比大小
区间判断
switch的升级版when
when的类型推导
如果各个分支的返回类型不相同,str则会被推导成Any类型,相当于Java当中的Object
5、循环与标签
在 Kotlin 中任何表达式都可以用标签来标记。标签的格式为标识符+ @ 符号,例如:aaa@、bottom@都是有效的标签, 要为一个表达式加标签,我们只要在其前加标签即可。
标签的应用
break
return
this
for循环
6、类与对象
先来一个空类
6.1、构造方法
上面这种写法,转成java之后class 是用final修饰的,所以不能被继承,但是我想写一个父类怎么办呢,class前面用open修饰,这个类就可以被继承了,就去掉了final关键字
6.2、属性默认值
在Java中所有的属性值是可以有默认值的,默认为null,是没有什么问题的,但是Kotlini中,如果不给属性赋值,就会报错
解决办法
?=允许为空自己去补救
自己赋予初始值皆大欢喜
用懒加载 lateinit修饰
6.3、抽象类和接口
抽象类 和接口 和java的写法相似
6.4、数据Bean
JavaBean的写法,Kotlin中用dataclass代替了JavaBean,还生成了copy函数
转成java的代码
6.5、Kotlin的Object和伴生对象companion object
Kotlin的単例模式Object类
转成Java之后的代码
伴生对象companionobject,为了方便理解咱们先上代码
转Java之后
所谓的伴生对象,就是伴随这出生的对象,直接在类初始化的时候,这个伴生对象Companion 也跟着实例化了,并且将伴生对象的属性变成了此类的静态变量,调用方法的时候,也是类直接调用静态属性Companion,然后再调用show方法
kotlin的内部类
点击这里可以给我留言哦~
给个赞和在看支持一下么么哒!
领取专属 10元无门槛券
私享最新 技术干货