认识
kotlin是一种运行在java虚拟机上的静态类型编程语言,可以被编译成java字节码,也可以变异成javaScript,方便在没有JVM的设备上运行。
基本数据类型
1.数据类型
首字母大写
2.字面常量
下面是所有类型的字面常量:
Kotlin 同时也支持传统符号表示的浮点数值:
Doubles 默认写法: 123.5, 123.5e10
Floats 使用 f 或者 F 后缀:123.5f
你可以使用下划线使数字常量更易读:
val oneMillion = 1_000_000val creditCardNumber = 1234_5678_9012_3456Lval socialSecurityNumber = 999_99_9999Lval hexBytes = 0xFF_EC_DE_5Eval bytes = 0b11010010_01101001_10010100_10010010
main函数写法
funmain(args:Array){// 包级可见的函数,接受一个字符串数组作为参数println("Hello World!")// 分号可以省略
}
基础语法
1.包声明,kotlin的包生命不像java那样包声明必须和文件目录匹配。kotlin的源文件可以放在任意的文件目录下。不用和包声明相匹配。
代码实例:
fun test(){}
class Runoob{}
2.默认导入,kotlin的源文件中有默认导入的包,这些包不用手动声明导入。
kotlin.*
kotlin.annotation.*
kotlin.collections.*
kotlin.comparisons.*
kotlin.io.*
kotlin.ranges.*
kotlin.sequences.*
kotlin.text.*
这些包都会默认的导入到kotlin的源文件中
3.函数定义,函数的定义试用fun关键字。参数格式是(参数名:类型)。kotlin的函数书写时每一行之后不用加分号
代码实例:
fun sum(a : Int,b : Int){
return a+b
}
对于简单的函数,还可以试用简单的声明方式
fun sum(a:int,b:int)=a+b//函数的返回值类型自动判断
//如果试用public关键字修饰方法则需要声明返回值得类型
public fun sum(a : Int,b : Int) : Int=a+b
public fun sum(a : Int;b : Int) : Int{
return a+b
}
函数的参数和java一样还可以定义不定长的参数声明。试用关键字vararg。
如:
fun dayin(vararg v:Int
for(vt in v){
print(vt)
}
}
4.定义常亮与变量,可变变量的定义使用var关键字
var :=
不变变量(常量)的定义使用关键字val,只能赋值一次的变量。
val : =
代码实例:
//可变变量
var a: Int = 1
var a1=2//系统自动判断变量类型为Int
//不可变常量
val b:Int=3
val b1=4//系统自动判断数据类型为Int
val b2:Int//如果不在声明时初始化则必须提供变量的类型
5.字符串模板
$表示一个变量名或者变量值
$varName表示变量值
$表示变量的方法的返回值
代码实例:
var a : Int = 1
val s0 = "a is $a"
a=2
val s1="$,but now is $a"
6.NULL检查机制
Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式,字段后加!!像Java一样抛出空异常,另一种字段后加?可不做处理返回值为 null或配合?:做空判断处理
//类型后面加?表示可为空varage:String?="23"//抛出空指针异常val ages=age!!.toInt()//不做处理返回 nullval ages1=age?.toInt()//age为空返回-1val ages2=age?.toInt()?:-1
当一个引用可能为 null 值时, 对应的类型声明必须明确地标记为可为 null。
当 str 中的字符串内容不是一个整数时, 返回 null:
fun parseInt(str:String):Int?{// ...}
以下实例演示如何使用一个返回值可为 null 的函数:
fun main(args:Array){if(args.size
7.类型检测及自动类型转换
我们可以使用 is 运算符检测一个表达式是否某类型的一个实例(类似于Java中的instanceof关键字)。
fun getStringLength(obj:Any):Int?{if(objisString){// 做过类型判断以后,obj会被系统自动转换为String类型returnobj.length}//在这里还有一种方法,与Java中instanceof不同,使用!is// if (obj !is String){// // XXX// }// 这里的obj仍然是Any类型的引用returnnull}
或者
fun getStringLength(obj:Any):Int?{if(obj!isString)returnnull// 在这个分支中, `obj` 的类型会被自动转换为 `String`returnobj.length}
甚至还可以
fun getStringLength(obj:Any):Int?{// 在 `&&` 运算符的右侧, `obj` 的类型会被自动转换为 `String`if(objisString&&obj.length>)returnobj.lengthreturnnull}
8.区间
区间表达式由具有操作符形式..的 rangeTo 函数辅以 in 和 !in 形成。
区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。以下是使用区间的一些示例:
for(iin1..4)print(i)// 输出“1234”for(iin4..1)print(i)// 什么都不输出if(iin1..10){// 等同于 1
9.实例测试
fun main(args:Array){print("循环输出:")for(iin1..4)print(i)// 输出“1234”println("\n----------------")print("设置步长:")for(iin1..4step2)print(i)// 输出“13”println("\n----------------")print("使用 downTo:")for(iin4downTo1step2)print(i)// 输出“42”println("\n----------------")print("使用 until:")// 使用 until 函数排除结束元素for(iin1until4){// i in [1, 4) 排除了 4print(i)}println("\n----------------")}
输出结果:
循环输出:1234----------------设置步长:13----------------使用downTo:42----------------使用until:123----------------
后面的实在懒得手打了,直接复制粘贴了
领取专属 10元无门槛券
私享最新 技术干货