Google官方推荐使用Kotlin进行Android开发,能够更及时地获得与Android开发相关的新特性和支持。
hello kotlin
fun main(args:Array<String>){
print("hello koltin")
}
image.png
二,变量
var a = 7;
常见的数据类型
数据类型
他可以根据你写的数据字段判断属于那个数据类型
显示类型转换
var a:Byte = 10;
val num = 22;//用val声明的变量不允许再重新赋值的
2.1 变量的取值范围
val aByte:Byte = Byte.MAX_VALUE
val bByte:Byte = Byte.MIN_VALUE
println("最大值byte值为"+aByte)
println("最小值byte值为"+bByte)
image.png
int类型可以使用二进制的方式进行赋值,写法为0b开头
比如 0b0011 值就是十进制的3
三,函数
image.png模板字符串
fun place(placeName:String):String{
var template="""今天很好,我们去了${placeName},这个${placeName}真好啊"""
return template
}
fun main(args:Array<String>){
println(place("杭州"))
}
image.png
if/else 条件判断
fun computed(score:Int){
if (score >= 60) {
print("及格了")
}else{
print("你不及格")
}
}
fun main(args:Array<String>){
computed(60);
}
判断
2的100次方 Math.pow(2,100);
字符串比较
-
1 ==
==‘表示比较值,等于equal -
2 equal(比较的变量,true/false)
第二个参数是是否忽略字母大小写,true=是
when
fun score(num:Int){
when(num){
100 -> println("太牛了")
90-> println("优秀")
80-> println("可以")
70-> println("加油")
60-> println("要努力了")
else-> println("还需要努力")
}
}
score(60)
Loop 循环 和区间
求1-100 的和
fun main(args:Array<String>){
var nums = 1..100 //代表声明了一个数组 1-100
var sum = 0
for (num in nums) {
sum += num
}
println(sum)
}
-
区间
var nums = 1 until 100 不包含100 [1,100) -
步长 step
var nums =1..10//代表声明了一个数组 1-100
var sum = 0
for (num in nums step 3) {
println(num)
}
1 4 7 10
- 翻转 .reversed()
- 总数 .count()
list和map集合
- list集合
fun main(args:Array<String>){
var lists = listOf("西瓜","草莓","橙子")
for (list in lists) {
println(list)
}
}
image.png
带索引的列表
fun main(args:Array<String>){
var lists = listOf("西瓜","草莓","橙子")
for ((i,list) in lists.withIndex()) {
println("$i,$list")
}
}
- map集合
是一种键值对的格式
fun main(args:Array<String>){
var map=TreeMap<String,String>()
map["user"]="admin"
map["password"]="123456"
println(map["user"])
println(map)
}
111
函数和函数表达式
fun add(x:Int,y:Int):Int{
return x+y;
}
如果有返回值,直接能return和大括号删掉
fun add(x:Int,y:Int):Int = x+y;
定义变量的函数
//定义了函数
var fn = {x:Int,y:Int->x+y}
//所以这个fn就是函数了
var result = fn(4,5);
prinyln(result);//9
字符串和数字转换
数字转换为字符串使用toString()
方法
字符串转换为数字用toInt()
方法
kotlin人机交互
image.png使用try catch嵌套
四,面向对象
静态:属性
动态:方法
- 第一个特点
用基本数据类型描述复杂的事物
class Rect(var long:Int,var width:Int)
fun main(args:Array<String>) {
var Rect1 = Rect(long = 10, width = 20);
println("宽度为${Rect1.width}")
}
- 第二个特点
赋予行为
class Girl(var name:String,var age:Int){
fun dance(){
println("正在跳舞")
}
}
fun main(args:Array<String>) {
var girl = Girl(name = "小青", age = 20);
println("女孩名字叫${girl.name},年龄为${girl.age},")
girl.dance();
}
五,继承和多态
继承
跟java继承不一样,需要在父类前加关键词open
,
那么儿子性格是可以改变的,所以可以重写父类的方法.但在kotlin语言中,重写需要在父类的方法前添加
open
关键字
多态
共有的特性.同种功能不同的表现形态
比如开车,特性都是开车,那么有的人单手开车,有的人双手开车
接口
把自己提供给外界的一种抽象化物,内部操作分理处外部的沟通方法
实现要重写接口里面的方法或者把当前类变成抽象类
接口是事物的能力
抽象类是事物的本质
image.png
委托和代理
委托是把事情交给别人办理
代理是以他人名义在授权范围内进行
委托 比如说,同样一件事情别人给我100块,给那个人10块钱,那么我就可以花10块钱委托给那个人来帮我做
image.png
委托我也可以做自己的事情
image.png
但是这样构建出来了两个oerson1.所以要有且只有一个就需要将person1的class改成Object
枚举
枚举印章类
sealed class 类名
阻止该类被继承
六,高阶函数
函数式编程
遍历数据并打印 简写
package week
fun main() {
var names = listOf<String>("张三","李四","王老五")
names.forEach{
println(it)
}
}
result
kotlin图像处理
//在内存中生成一个宽高为100的图片
BufferedImage(100,100,BufferedImage.TYPE_INT_BGR)
### kotlin高阶函数数据库遍历
比如我需要找出年龄最大/最小的人 直接使用
//返回找出来的集合
database.maxBy(it.age)
查找特定条件的,如年龄大于18,且身高165的
database.filter({
(it.age>18)and(it.height>165)
})
map 把某个属性映射出新的集合
database.map{
"${it.name}:${it.age}"
}
#### any 集合中有没有某一个数据
返回布尔值
database.any{
it.age==18
}
#### count 统计符合条件的个数
#### find 查找第一个符合条件的
#### groupBy 根据不同类型分组
#### DSL 领域特定语言
扩展函数
![image.png](https://img.haomeiwen.com/i24559446/22ebb51a6a4027ce.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image.png](https://img.haomeiwen.com/i24559446/36c8e5bf0f793ac9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
网友评论