Kotlin笔记(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GXH_APOLOGIZE/article/details/80383841
什么是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项目
image

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,安装插件即可。
基本数据类型

image

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
}

猜你喜欢

转载自blog.csdn.net/GXH_APOLOGIZE/article/details/80383841