Kotlin学习(一)
1.使用IDEA构建Kotlin项目
新建工程即可
我这里选择的Build System是IntelliJ,虽然我没用过但是这是Kotlin基础学习应该不会用到其他依赖
2.Hello World
package com.simonfun main(args:Array<String>){println("hello kotlin");
}
3.常量与变量
package com.simon
//变量声明与使用
fun main(args:Array<String>){//变量var name = "张三"name = "李四"println(name)// name = 8 //8是一个数字不能放到String里面println(name)
}
常见的数据类型:
Byte 2的8次方
Short 2的16次方
Int 2的32次方
Long 2的64次方
Float 小数点后6位
Double 小数点后15-16位
String 字符串
Boolean 布尔型
4.类型推断
package com.simonfun main(args:Array<String>){var i = 18//i = 9999999999//The integer literal does not conform to the expected type Int//我们发现我们的i自动编译为Int类型var j = 9999999999//我们的j可以存储自然那么编译为Long类型var name:String = "simon"//我们的name就是存放一个字符串的空间//我们根据等号后面来推断数据类型val num = "123"//num是常量所以说是只读}
根据等号后面来自动推断类型
所以我们的var name:String = “simon” 可以写为 var name = “simon”
5.基础类型大小
package com.simonfun main(args:Array<String>) {val aByte:Byte = Byte.MAX_VALUE;val bByte:Byte = Byte.MIN_VALUE;println(aByte)println(bByte)val aLong:Long = Long.MAX_VALUE;val bLong:Long = Long.MIN_VALUE;println(aLong)println(bLong)
}
6.布尔值类型
package com.simonfun main(args:Array<String>) {var num1 = 1var num2 = 4println(num1<num2)var num3 = Math.sqrt(5.0) - Math.sqrt(4.0)var num4 = Math.sqrt(4.0) - Math.sqrt(3.0)println(num3<num4)
}
7.函数
package com.simon
//1.函数基本定义格式
fun sum(a:Int,b:Int):Int{//函数返回值Intreturn a + b
}fun main(args: Array<String>) {//2.可以用表达式作为函数体//表达式不是public就可以省略返回值类型fun sum(a: Int,b: Int) = a+b}
// 3.public 方法表达式就要明确写出
public fun sumPub(a:Int , b: Int):Int = a+b
//4.无返回值可以省略
fun printZzz(){println("printZzz")
}
public fun printXxx(){println("printXxx")
}
//5.可变长参数列表
fun vars (vararg v:Int){for (vt in v) {println(vt)}
}
//6.lambda表达式
val sumLambda: (Int,Int)->Int = {x,y -> x+y}
8.字符串模板
package com.simonfun main(args: Array<String>) {//$ 表示一个变量名或者变量值var a = 1var s1 = "a is $a"println(s1)a = 2//${}是一个变量的方法返回值var s2 = "${s1.replace("is","was")},but now a = $a";println(s2)
}
总结:
$ 可以是变量值
${} 可以是变量的方法返回值
9.NULL检查
package com.simonfun main(args: Array<String>) {//类型后面加?表示可以为空var age:Int? = null
// var age1:Int = null//抛出空指针异常
// val ages = age!!.toInt()//不作处理返回nullvar ages1 = age?.toInt()//age为空返回-1var ages2 = age?.toInt() ?:-1// println(ages)println(ages1)println(ages2)println(parseInt("zzz"))println(parseInt("123"))
}
//当一个引用可能是null时,对应的类型声明必须明确地标记为可为null
fun parseInt(str:String):Int?{return str.toIntOrNull();
}//上面这段代码就是我们的age这个变量是int类型但是我们赋值为null,因为加了问号说明可以为null
// var age1:Int = null 是抛出空指针,如果是数字就不会抛出
// var ages1 = age?.toInt() 这个就自然输出null了不处理
// var ages2 = age?.toInt() ?:-1 这个就处理了如果是null就赋值-1
10类型检测以及自动类型转换
package com.simonfun main(args: Array<String>) {println(getStringLength(123))println(getStringLength("123"))
}fun getStringLength(obj: Any):Int?{
// if (obj is String){
// return obj.length
// }
// return nullif (obj !is String){return null}//在这个分支中,obj会自动转换为String类型return obj.length
}
is and !is 类型判断
11.区间
package com.simonfun main(args: Array<String>) {for (i in 1..4) print(i)//什么都不输出,所以得知默认是升序的for (i in 4..1) print(i)for (i in 1..10){print(i)}println()//使用step指定步长for(i in 1..4 step 2){print(i)![在这里插入图片描述](https://img-blog.csdnimg.cn/73dd3e82979a433291798d7c797b1a22.png#pic_center)}println()for(i in 4 downTo 1 step 2){print(i)}println()//使用until函数排除结束元素for(i in 1 until 10){print(i)}
}
区间 in xx…xx
默认升序,downTo降序
并且step指定步长
并且until排除结尾