什么是Kotlin
- Kotlin是一门全栈语言。
- Kotlin就是一门可以运行在Java虚拟机、Android、浏览器上的静态语言,它与Java100%兼容。
- Kotlin除了自己的标准库之外,大多仍然使用经典的Java集合框架。
Kotlin优点
- 简洁(主要相对于Java)
- 空值安全
- 100%与Java兼容
- 函数式编程
- 协程
- DSL
参考资料
http://kotlinlang.org/
https://www.kotlincn.net/
开发工具
http://www.jetbrains.com/idea/download/index.html#section=windows
下载.zip,解压即可。配置JDK。
helloWorld
创建Kotlin项目
package cn.gxh.day01
fun main(args:Array<String>){
println("hello world")
}
Kotlin程序运行过程
- Kotlin源文件(*.kt)编译成Kotlin字节码文件(*Kt.class文件)
- Kotlin字节码文件解释到计算机
查看Kotlin对应Java代码
- Kotlin源文件(*.kt)编译成Kotlin字节码文件(*Kt.class文件)
- 将字节码文件反编译成Java代码
在IntelliJ IDEA中Tools–>Kotlin–>Show Kotlin ByteCode,即可编译成字节码文件,然后字节码文件上面有个Decompile,点击即可反编译成Java代码,如果没有这个Decompile,安装插件即可。
基本数据类型
var b:Boolean=false
var byte:Byte=10;
var int :Int=20;
var long:Long=30;
var char:Char='z'
var float:Float=1.234f
var double:Double=1.3455
var short:Short=10
Kotlin没有包装类型的,它会根据使用场景自动分辨使用基本数据类型还是包装类型
var a:Int=10
println(a.hashCode())
//上面这两行代码对应的Java代码
Intrinsics.checkParameterIsNotNull(args, "args");
int a = 10;
int var2 = Integer.valueOf(a).hashCode();
System.out.println(var2);
Kotlin调用Java
//BigDecimal是Java的api,在Kotlin中可以直接调用Java代码,不过要符合Kotlin语法
var bigDe:BigDecimal= BigDecimal("1234567")
print(bigDe)
智能类型推断和类型转换
//int i=10;Java中这么定义变量
//Kotlin标准定义变量
var a:Int=10
//实际中我们会用下面这种方式定义变量
//Kotlin编译器推断出Int类型
var b=20
var str="hello"
var byte:Byte=10
var l=10L
//字符串转基本数据类型
var strNum="20"
println(strNum.toInt())
//Kotlin不同的基本数据类型之间不能相互赋值
//只能通过to方法转换
var u1=10
var u2=20L
u2=u1.toLong()
u1=u2.toInt()
可变与不可变变量
//不可变变量用val,其实还可以用反射修改它的值
var a1=10
val a2=20
//项目中尽量使用val,不能使用它的时候考虑var
空指针异常
//val str:String=null 非空类型,不能赋值null
//可空类型
val str:String?=null
// !!告诉编译器不要检查了,我一定不为null
//str!!.toInt()
//空安全调用符?. 返回的是可空类型
str?.toInt()
//str?.toInt() 与下面这种类似
if(str!=null){
return str.toInt()
}else{
return null;
}
//这么写不行
//val i:Int=str?.toInt()
val i:Int=str?.toInt()?:-1
输入输出函数
val a=10;
println(a)
var m:Int
m= readLine()?.toInt()?:-1
println(m)
定义函数
fun sayHello(){
println("hello")
}
fun sayHello(name:String){
println("hello"+name)
}
//有参有返回值
fun getLength(str:String):Int{
return str.length
}
fun getLength():Int{
return "hello".length
}
字符串
- 定义
//普通字符串
var address = "北京市海淀区中关村南大街"
println(address)
//原样输出字符串
var address1 = """
北京市
海淀区
中关村南大街
""".trimIndent()
println(address1)
- 字符串删除空格
var address=" beijing haidian "
var address1=address.trim()
println(address)
println(address1)
- 字符串比较
//Java中equals来比较字符串的值,==比较的是内存地址
//Kotlin中equals比较字符串的值,==比较的也是字符串的值,===比较的是内存地址
- 切割和截取
var address="beijing,haidian,zhongguancun-qinghua"
var result:List<kotlin.String> = address.split(",")
var result1:List<kotlin.String> = address.split(",","-")
println(result)
println(result1)
print(address.substring(0,5))
//第一个n之前的
print(address.substringBefore("n"))
//最后一个n之前的
print(address.substringBeforeLast("n"))
//第一个n之后的
print(address.substringAfter("n"))
//最后一个n之后的
print(address.substringAfterLast("n"))
- 字符串模板
fun createDiary(place:String):String{
//val result="今天我去了"+place+",这个地方真好玩"
val result="今天我去了${place},这个地方真好玩..${sayHello()}"
return result
}
fun sayHello(){
println("hello")
}
二元元组、三元元组
//定义二元元组
val pair=Pair<String,Int>("gxh",20)
print(pair.first)
print(pair.second)
val pair1="gxh" to 25
//三元元组
val triple=Triple<String,Int,String>("gxh",23,"gender")
条件控制语句if
//Kotlin中if有返回值
fun max(a:Int,b:Int):Int{
return if(a>b) a else b
}