1. HelloWorld
fun main(args: Array<String>) {//相当于Java的main()函数
println("Hello Kotlin!")
}
2. Kotlin当中的基本数据类型与Java有些不同
Kotlin当中的基本数据类型基本上与Java差不多,但是Kotlin当中并不存在int和Integer等类似的基本类型对应的关键字,而只存在Int、Byte、Boolean等等基础类型关键字,所以根本不存在拆箱和装箱的概念。
image
Kotlin中获取基础类型的极值非常简单,例如:Int类型
var maxInt:Int = Int.MAX_VALUE
println("Int类型的最大值是:"+maxInt)
var minInt:Int = Int.MIN_VALUE
println("Int类型的最小值是:"+minInt)
Kotlin中变量的声明涉及到两个关键字:
var 变量
val 常量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被修改
Kotlin中不支持类型自动转化。在Java中char->int->long,int->float等等都可以自动转换,Kotlin为了降低不必要的错误不支持
4.Java中的原始祖类是Object,而Kotlin确实Any
Any只存在3个方法:equals(),hashCode,toString
4.Kotlin处理空指针
在java开发中空指针应该是出现频率最高的异常之一,为了避免空指针我们也做了很多的防护。Kotlin在空指针上的处理非常的人性化;Kotlin当中的所有类型都分为“可空类型”和“非空类型”,比如:“String”和“String?”,String就是非空类型,非空类型是不允许被null赋值的,否则代码编译报错,而可空类型可以被null赋值,默认都是非空类型。
下面有两个非常具有代表性的示例
println(getNetJson()?.length)//当getNetJsonwei为null时输出null,不为空时输出getNetJson()的长度
getNetJson?.return//当getNetJsonwei为null时返回
Kotlin中对可空对象的直接调用是不允许的
var str:String? = "dsada"
println(str.length)//编译器报错,因为str可能为null,为null的时候是不能调用length的
嘿嘿 是不是该觉安全了很多
如果我们十分确定这个被声明为可空的变量一定不为空,你可以给编译器一点保证,让它放心使用
var str:String? = "dsada"
println(str!!.length)
5.Kotlin中的类型转换
Java中的类型转换是指存在继承关系的,子类可以向上自动转型为父类,而父类转子类则需要强制转换。Kotlin中的类型转换使用as关键字
var f: Any = 1
fun main(args:Array<String>){
var num=f as Int
}
但是有时候我们不太确定是否符合转换,如果这个被转换的值不是我们试图转换的类型,该怎么办?Java中我们会先判断类型。
var f: Any = “1“
fun main(args:Array<String>){
var num=f as? Int
}
仔细看,as变成了as? 当f不是Int类型时,num会被赋值为null
6.Kotlin的外号是咋回事
在java中一个类同时使用了多个类名相同但是属于不同包的类,在java中的处理是带上包路径来进行区分。Kotlin中采用了别名机制:
import A.Student as AS//将A包下的Student类取外号为"AS"
import B.Studnet as BS//将B包下的Student类取外号为"BS"
open class Student{
init {
println("我是C包中的Student")
}
}
fun main(args: Array<String>) {
var astudent:AS = AS()//通过外号来创建实例对象
var bstudent:BS = BS()//通过外号来创建实例对象
var cstudent:Student = Student()
}
感觉清晰多了吧
7.Kotlin的“区间”
t类名叫Range
整型区间:
var intRange:IntRange = 0..1024//区间为[0,1024],注意是全闭的
var intRange2:IntRange = 0 until 1024//区间为[0,1024),注意是半闭半开的,包头不包尾
println("50是否存在与区间[0,1024]:"+intRange.contains(50))
println("-3是否存在与区间[0,1024):"+intRange.contains(-3))
//遍历区间
for(i in intRange){
println(i)
}
网友评论