Kotlin基础(一)

来源:互联网 发布:淘宝怎么代销产品 编辑:程序博客网 时间:2024/05/13 13:00

2017年的Google I/O的大会上宣布一个重磅消息,就是Android开发支持Kotlin。

虽然现在国内的Android开发用Kotlin的不会很多,但是肯定要学一下,预防万一的。

如果之前学过java的,并且java基础比较可以的。再来学Kotlin,那可以说是非常简单的。因为java跟Kotlin还是挺多地方相似的,只是Kotlin比java简化非常多。

这里只会列出大部分Kotlin相比java比较特别的地方,就简单的写一些Demo演示一下。这里不适合没有编程语言基础的学习的。

先列出来Kotlin的关键字,了解一番:

Kotlin的关键字

  • var:定义变量
  • val:定义常量
  • fun:定义方法
  • Unit:默认方法返回值,类似于Java中的void,可以理解成返回没什么用的值
  • vararg:可变参数
  • $:字符串模板(取值)
  • 位运算符:or(按位或),and(按位与),shl(有符号左移),shr(有符号右移),ushr(无符号右移),xor(按位异或),inv(按位取反)
  • in:在某个范围中 检查值是否在或不在(in/!in)范围内或集合中
  • downTo:递减,循环时可用,每次减1
  • step:步长,循环时可用,设置每次循环的增加或减少的量
  • when:Kotlin中增强版的switch,可以匹配值,范围,类型与参数
  • is:判断类型用,类似于Java中的instanceof()is运算符检查表达式是否是类型的实例。
    如果一个不可变的局部变量或属性是指定类型,则不需要显式转换
  • private //仅在同一个文件中可见
  • protected //同一个文件中或子类可见
  • public //所有调用的地方都可见
  • internal //同一个模块中可见
  • abstract //抽象类标示
  • final //标示类不可继承,默认属性
  • enum //标示类为枚举
  • open //类可继承,类默认是final的
  • annotation //注解类
  • init //主构造函数不能包含任何的代码。初始化的代码可以放到以 init 关键字作为前缀的初始化块(initializer
    blocks)中
  • field //field 标识符只能用在属性的访问器内。特别注意的是,get set方法中只能能使用filed
    绝对的。属性访问器就是get set方法。洋气的名字。关于这个我会在后面详细说明
  • ://用于类的继承,变量的定义
  • .. //范围操作符(递增的) 1..5 2..6 千万不要6..2
  • :://作用域限定符,kotlin这个和c语言一样。这个我个人觉得在kotlin中还是很少见的。
  • inner //类可以标记为 inner {: .keyword } 以便能够访问外部类的成员。内部类会带有一个对外部类的对象的引用
  • object//对象声明 并且它总是在 object{: .keyword }
    关键字后跟一个名称。对象表达式:在要创建一个继承自某个(或某些)类型的匿名类的对象会用到
  • it //单个参数的隐式名称 如果函数字面值只有一个参数,那么它的声明可以省略(连同 ->),其名称是 it。
  • inline //修饰符影响函数本身和传给它的 lambda 表达式:所有这些都将内联

接下来直接演示Demo,配置编辑环境和编辑器,网上一找一大堆,这里就不一一说明了。


一、变量的取值范围

fun main(args: Array<String>) {    val aByte: Byte = Byte.MAX_VALUE    val bByte: Byte = Byte.MIN_VALUE    println("Byte的最大值:" + aByte)    println("Byte的最小值:" + bByte)    val aShort: Short = Short.MAX_VALUE    val bShort: Short = Short.MIN_VALUE    println("Short的最大值:" + aShort)    println("Short的最小值:" + bShort)    val aInt: Int = Int.MAX_VALUE    val bInt: Int = Int.MIN_VALUE    println("Int的最大值:" + aInt)    println("Int的最小值:" + bInt)    val aLong: Long = Long.MAX_VALUE    val bLong: Long = Long.MIN_VALUE    println("Long的最大值:" + aLong)    println("Long的最小值:" + bLong)    var str1 = "Layne"    var str2 = "layne"    //第二个参数为布尔值,false代表不忽略字母的大小写,true则表示忽略    println(str1.equals(str2, false))    println(str1.equals(str2, true))}

运行结果:
这里写图片描述


二、函数的演示

//普通有参数和返回值的函数fun sayHello(name: String): String {    return "hello " + name;}//参数可以为空的函数fun sayHelloOne(name: String?): String {    return "hello " + name;}fun diaryGenerater(placeName: String): String {    var temple = "您传入的是:${placeName},${placeName}有${placeName.length}个字的长度!";    return temple;}//when表达式的用法,类似java的Switchfun gradeStudent(score: Int) {    when (score) {        10 -> println("满分,很棒")        9 -> println("干得不错")        8 -> println("还可以")        7 -> println("还需努力")        6 -> println("刚好及格")        else -> println("需要好好加油")    }}//简化的函数fun add(x: Int, y: Int): Int = x + yfun main(args: Array<String>) {    println(sayHello("layne"))    println(sayHelloOne(null))    println(diaryGenerater("layne"))    gradeStudent(10)    println("简化的函数" + add(4, 5))    var i = { x: Int, y: Int -> x + y }    println("函数表达式1:" + i(5, 5))    var j: (Int, Int) -> Int = { x, y -> x + y }    println("函数表达式2:" + j(6, 5))}

运行结果:
这里写图片描述


三、变量类型的转换

fun main(args: Array<String>) {    var a = "20"    var b = 10    var c = "30"    //数字装换成字符串    a = b.toString()    println(a)    //字符串转换成数字    b = c.toInt()    println(b)    //i = "a20"编译虽然没有问题,但是运行时有问题的    //顺带在这里说明一下异常处理,和java类似    var i = "a20"    var j = 10    try {        j = i.toInt()    } catch(e: Exception) {        println("不好意思,该字符串不能转换成数字")    }}

运行结果:
这里写图片描述


四、人机交互的演示

fun main(args: Array<String>) {    println("请输入第一个数字:")    var num1str = readLine()    println("请输入第二个数字:")    var num2str = readLine()    var num1:Int = num1str!!.toInt()    var num2:Int = num2str!!.toInt()    println("$num1 + $num2 = ${num1+num2}")}

运行结果:
这里写图片描述


五、开区间和闭区间的演示

/* 开区间和闭区间 开区间用(a,b)来表示 闭区间用[a,b]来表示 闭区间包括了两个端点a和b 而开区间不包括两个端点a和b */fun main(args: Array<String>) {    println("闭区间的使用:")    var nums = 1..10 // [1,10]    for(num in nums){        print("${num},")    }    println("")    println("====================")    println("开闭区间的使用:")    var nums1 = 1 until 10 // [1,10)    for(num in nums1){        print("${num},")    }    println("")    println("====================")    println("step的使用:")    var nums2 = 1 .. 20     for(num in nums2 step 2){        print("${num},")    }    println("")    println("====================")    println("reversed()的倒叙使用:")    var num3 = nums2.reversed()    for(num in num3 ){        print("${num},")    }    println("")    println("====================")    println("总数为:"+num3.count())}

运行结果:
这里写图片描述


六、list和map集合的演示

//list和map集合的简单使用fun listTest() {    var lists = listOf("kotlin", "java", "python", "php", "c", "c++")    for ((i, e) in lists.withIndex()) {        println("$i -> $e")    }}fun mapTest() {    var map = TreeMap<String, String>()    map["stu1"] = "Layne1";    map["stu2"] = "Layne2";    map["stu3"] = "Layne3";    map["stu4"] = "Layne4";    map["stu5"] = "Layne5";    println("$map")}fun main(args: Array<String>) {    listTest()    println("=================")    mapTest()}

运行结果:
这里写图片描述


七、默认参数和具名参数的演示

//声明一个常量PIval PI = 3.14159f//计算长方形面积:长*宽fun getRectArea(long: Float, wide: Float): Float {    return long * wide;}//计算圆的周长:2*π*半径(使用默认参数)fun getRoundGirth(Pi: Float = PI, radius: Float): Float {    return 2 * Pi * radius;}//计算圆的周长:π*直径(使用默认参数)fun getRoundGirth2(Pi: Float = PI, diameter: Float): Float {    return Pi * diameter;}//计算圆的体积:π*半径*半径*高(使用默认参数)fun getRoundVolume(Pi: Float = PI, radius: Float, high: Float): Float {    return Pi * radius * radius * high}//计算球体的表面积:π*半径*半径*4(使用默认参数)fun getGlobeArea(Pi: Float = PI, radius: Float): Float {    return Pi * radius * radius * 4;}fun main(args: Array<String>) {    println("长方形面积:"+getRectArea(3f,4f))    println("圆的周长:"+getRoundGirth(radius = 4f))//具名参数    println("圆的周长:"+getRoundGirth2(diameter = 8f))//具名参数    println("圆的体积:"+getRoundVolume(radius = 4f,high = 5f))//具名参数    println("球体的表面积:"+getGlobeArea(radius = 4f))//具名参数}

运行结果:
这里写图片描述

原创粉丝点击