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))//具名参数}
运行结果:
阅读全文
0 0
- Kotlin(一)基础
- Kotlin基础(一)
- Kotlin(一)语法基础
- Kotlin 基础语法(一)
- Kotlin基础入门(一)
- kotlin基础语法(一)
- android使用kotlin开发基础(一)之 hello kotlin
- Kotlin基础(一)android studio中配置Kotlin
- Android+Kotlin开发之Kotlin基础(一)
- Kotlin基础(一)android studio中配置Kotlin
- Kotlin入门____基础语法(一)
- android kotlin基础(一)-新建项目
- Kotlin学习(一)基础语法
- kotlin零基础入门(一)
- Kotlin基础(一)--- 基本类型
- Kotlin基础概念(一)
- kotlin学习(一)------基础
- Kotlin一步一个脚印学习基础一
- Windows下cmd标准输入输出重定向命令
- Command "python setup.py egg_info" failed with error code 1 in ...
- 搜寻资料备战面试
- 机器学习中的数学(3)-模型组合之Boosting与Gradient Boosting
- hdu1398 Square Coins(生成函数)
- Kotlin基础(一)
- 2017/12/22
- android系统平台显示驱动开发简要:LCD驱动调试篇『四』
- 控制反转(IOC)、依赖注入(DI)之通过set方法注入
- 软件需求规格
- gettype
- python java 速度
- 干货转载,log4j2配置讲解,深入浅出,好文收藏
- iTunes 打包,iTunes 升级12.7 没有应用的问题,加入iTunes 12.6老版本