Kotlin学习(一)
1.使用IDEA构建Kotlin项目
新建工程即可
我这里选择的Build System是IntelliJ,虽然我没用过但是这是Kotlin基础学习应该不会用到其他依赖
2.Hello World
package com.simon
fun 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.simon
fun 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.simon
fun 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.simon
fun main(args:Array<String>) {
var num1 = 1
var num2 = 4
println(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{//函数返回值Int
return 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.simon
fun main(args: Array<String>) {
//$ 表示一个变量名或者变量值
var a = 1
var s1 = "a is $a"
println(s1)
a = 2
//${}是一个变量的方法返回值
var s2 = "${s1.replace("is","was")},but now a = $a";
println(s2)
}
总结:
$ 可以是变量值
${} 可以是变量的方法返回值
9.NULL检查
package com.simon
fun main(args: Array<String>) {
//类型后面加?表示可以为空
var age:Int? = null
// var age1:Int = null
//抛出空指针异常
// val ages = age!!.toInt()
//不作处理返回null
var ages1 = age?.toInt()
//age为空返回-1
var 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.simon
fun main(args: Array<String>) {
println(getStringLength(123))
println(getStringLength("123"))
}
fun getStringLength(obj: Any):Int?{
// if (obj is String){
// return obj.length
// }
// return null
if (obj !is String){
return null
}
//在这个分支中,obj会自动转换为String类型
return obj.length
}
is and !is 类型判断
11.区间
package com.simon
fun 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排除结尾