day01【Kotlin】
前言
0.什么是Kotlin?
中文:靠他灵
Jetbrains发布基于JVM的编程语言
groovy scalaJetbrains是做编译器起家的公司,总部捷克,有圣彼得堡和美国分部
Jetbrains https://www.jetbrains.com/
kotlin之父: Andrey Breslav
1.为什么使用Kotlin?
1.简洁(数据类 扩展方法 区间)
2.空值安全(针对空值处理的运算符)
3.百分百兼容 java scala
4.函数式编程 JDK1.8 lambda 表达式
5.协成(thread)
6.DSL(领域特定语言)
2.kotlin的前景?
1.kotlin script(gradle groovy).kts
2.Java虚拟机应用
Web kotlinee
Javafx JDK1.8之后
3.前端开发 Kontlinjs html+css+js
4.Android开发
5.支持开发 ios oc swift
6.Kotlin Native 程序(完全抛弃JVM虚拟机) 全栈工程师
3.kotlin的格式:
fun main(args: Array<String>) {
println("hello world")
}
4.kotlin 基本数据类型
数据类型 | 占用字节 | 取值范围 |
---|---|---|
Boolean | 1byte | true或false |
Byte | 1byte=8bit | -128~127 |
Char | 2byte | |
Short | 2byte=16bit | -32768~32767 |
Int | 4byte | -2147483648~2147483647 |
Float | 4byte | 精确到小数点后6位 |
Long | 8byte | 9223372036854775807~9223372036854775807 |
Double | 8byte | 精确到小数点后15到16位 |
a.基本数据类型书写格式:
var byte:Byte = 10
var short:Short = 20
var int:Int = 30;
var char:Char = 'H'
var float:Float = 1.2345f
var double:Double = 1.23456
var long:Long = 200
var b:Boolean= true
b.kotlin 和 Java 基本数据类型的区别
kotlin只有基本数据类型 没有包装数据类型
kotlin 基本数据类型相当于具备了java的基本数据类型和包装数据类型
会更具不同的使用场景选择使用基本数据类型还是包装数据类型
c.Kotlin 与 Java 虚拟机
java虚拟机的最大特点 : 跨平台
如何把Kotlin转化为Java文件:
首先把Kotlin 编译成.class文件,重新转化为Java文件
Iools->kotlin->Show Kotlin Bytecode
d.智能类型推断和类型转化
kotlin对于数据类型的转化比较严格,不同的数据类型之间不能转化,需要通过to数据类型方法实现转化.
格式:
var m =10 // int类型
var n =20L // long类型
m = m.toLong 把int类型转化为long类型
n = n.toInt 把long类型转化为int类型
5.Var 和 Val的区别
a.var 对应的就是Java的普通变量
b.val 对应的就是 Java的final变量
c.final 编译器常亮
d.val 运行时的
变量可变:var
var a =20
a=30
a=50
变量不可变:val
val a = 20
a =30 //报错
ps: 在我们项目开发中,能够使用val的话尽量使用val,实在不行的话再使用var
6.Kotlin 对于字符串的使用
/*---------------------------- 普通字符串 ----------------------------*/
fun main(args: Array<String>) {
//地址
val place = "广东省深圳市宝安区"
通过方法实现跨行答应
val place ="广东省\n深圳市\n宝安区
println(place)
}
打印结果: 广东省
深圳市
宝安区
kotlin字符串的原样输出字符串使用:
/*---------------------------- 原样输出字符串:自动帮我们加上一些特殊字符 -----------------------*/
val place = """
/中国
/北京
/长城
""".trimMargin("/")
println(place)
打印结果: 中国
北京
长城
kotlin字符串的删减使用:
fun main(args: Array<String>) {
val s = " 张三 "
println(s) //张三
/*---------------------------- 删除空格 ----------------------------*/
println(s.trim())
/*---------------------------- 原样输出字符串删除空格 ----------------------------*/
val place = """
/中国
/北京
/长城
""".trimMargin("/")
println(place)
打印结果:中国
北京
长城
kotlin字符串的比较使用:
/*---------------------------- 字符串比较 ----------------------------*/
val str1 = "hello"
val str2 = String(charArrayOf('h','e','l','l','o'))
println(str1)
println(str2)
//equals 比较的是值
println(str1.equals(str2))
//==和equals效果是一样的
println(str1==str2)
//=== 比较的是地址 相当于java的==
println(str1 === str2)
kotlin字符串的截取使用:
fun main(args: Array<String>) {
val path = "/Users/yole/kotlin-book/chapter.adoc"
/*---------------------------- 获取前6个字符 ----------------------------*/
val result1 = path.substring(0,6)
println(result1)
/*---------------------------- 把第一个r之前的字符截取 ----------------------------*/
先找第一个r角标
val index = path.indexOf("r")
val result2 = path.substring(0,index)
println(result2)
kotlin方法:
val result2 = path.substringBefore("r")
println(result2)
/*---------------------------- 把最后一个r之前的字符截取 ----------------------------*/
val result3 = path.substringBeforeLast("r")
println(result3)
/*---------------------------- 把第一个r之后的字符截取 ----------------------------*/
val result4 = path.substringAfter("r")
println(result4)
/*---------------------------- 把最后一个r之后的字符截取 ----------------------------*/
val result5 = path.substringAfterLast("r")
println(result5)
}
7.Kotlin 元组数据(特有)
二元组:Pair
三元组:Triple
fun main(args: Array<String>) {
/*---------------------------- 二元元组 ----------------------------*/
val pair = Pair<String,Int>("张三",20)
val pair = "张三" to 20
val name = pair.first
val age = pair.second
println(name)
println(age)
/*---------------------------- 三元元组 ----------------------------*/
//Triple
//姓名 性别 年纪
val triple = Triple<String,String,Int>("李四","男",30)
val name = triple.first
val sex = triple.second
val age = triple.third
println(name)
println(sex)
println(age)
8.空值处理
?可空变量类型
val a:Int? = null
!!非空断言
var age:String = null!!
?.空安全调用符
age?.toInt()
?:Elvis操作符(猫王)
var ageInt:Int = age?.toInt()?:10
9.打字交互
fun main(args: Array<String>) {
/*---------------------------- 输出函数 ----------------------------*/
val str = "hello"
println(str)
/*---------------------------- 输入函数 ----------------------------*/
var a:Int = readLine()?.toInt()?:0
var b:Int = readLine()?.toInt()?:0
var result = a+b
println(result)
打印结果:
10
20
30
10.kotlin函数
概述:main函数是kotlin程序的入口函数,他是计算机运行起来第一个默认找的第一个运行的函数.
函数包括输入函数与输出函数: (4类函数)
无参无返回值
fun myFun1() { println("myFun1")
}
无参有返回值
fun myFun2(): String {return "myFun2“
}
有参无返回值
fun myFun3(content: String) { println(content)
}
有参有返回值
fun myFun4(content: String): String { return content
}
a.顶层函数
概述:Java里面函数都需要依赖于对象存在不依赖于class类单独存在的函数
例如:
//顶层函数
fun main(args: Array<String>) {
}
//顶层函数
fun sayHello(){
}
b.嵌套函数
概述:函数里面定义的函数
例如:
//嵌套函数
fun main(args: Array<String>) {
fun hehe(){
println("hello")
}
hehe()
}
c.字符串模板练习
今天天气晴朗,万里无云,我们去中山公园游玩,首先映入眼帘的是,中山公园4个镏金大字。
今天天气晴朗,万里无云,我们去人民大会堂游玩,首先映入眼帘的是,人民大会堂5个镏金大字。
今天天气晴朗,万里无云,我们去金銮殿游玩,首先映入眼帘的是,金銮殿3个镏金大字。
今天天气晴朗,万里无云,我们去鸟巢游玩,首先映入眼帘的是,鸟巢2个镏金大字。
要求:通过规律定义模板
答 :
fun main(args: Array<String>) {
println(createDiary("中山公园"))
}
//创建字符串模板
//字符串拼接
fun createDiary(place:String):String{
return "今天天气晴朗,万里无云,我们去$place 游玩,首先映入眼帘的是,${place}${place.length} 个镏金大字。"
}
11.kotlin if语句的使用
a.普通的if语句
if(a>b){return a-b
}else{return b-a
}
b.去{}的if语句
去{}的if/else
if(a>b) return a-b else return b-a
c.精简if/else语句
if(a>b) return a-b else return b-a
d.If返回值语句
return if (a > b) a - b else b - a