我的Kotlin成长之路
来源:互联网 发布:mysql数据库安装路径 编辑:程序博客网 时间:2024/05/19 19:15
【我的Kotlin成长之路】基础知识及语法(一)
大部分知识来自简书作者:小耳朵图图是我
定义
- var 声明变量
- val 声明常量
声明变量或常量时,标识符在前,类型在后,中间用英文冒号隔开,示例如下(需要注意的是,常量延迟加载by lazy{},变量延迟lateinit。):
//可以快速赋值{int x = 123; }var x = 123//可以标准赋值{String s = "hello"; }var s:String = "hello"//可以赋值为空{String ss = null; }var ss:String? = null//声明常量数组{int[][][] arrs = new int[3][2][1];}val arrs = Array(3) { Array(2) { IntArray(1) } }
条件表达式
可以使用if…else进行判断,如
if( true ){ //code }else if ( false ){ //code2 }else{ //code3 }
也可以使用when来替代switch,when的条件可以是常量,变量,返回数值的表达式,返回Boolean值的表达式。
// 测试值 x = 0, -1, 1, 2, 3, 6, 10var x = 10when (x) { //常量 2 -> println("等于2") //数值表达式 if (x > 0) 1 else -1 -> println("大于0并等于1,或小于0并等于-1") //Boolean类型表达式 in 1..5 -> println("范围匹配1-5") !in 6..9 -> println("不是6-9") is Int -> println("类型判断") else -> println("else")}// 代替if...else ifwhen{ x > 6 && x <= 10 -> println("大于6小于等于10") x < 6 -> println("小于6") else -> println("else")}
循环
while
和do...while
与Java中没有区别,但for有很大改变多了几个变种,如下:for (i in list.indices) { print(list[i])}//递增for (int i = 2; i < list.size(); i++)for (i in 2..list.size - 1) { print(list[i])}//递减for (int i = list.size(); i >= 0; i--)for (i in list.size downTo 0) { print(list[i])}//操作列表内的对象for (item in list) { print(item)}//加强版for((i, item) in list.withIndex()) { print(list[i]) print(item)}//变种版list.forEach { print(it)}list.forEach { print(it)}list.forEachIndexed { i, s -> print(list[i]) print(s)}list.forEachIndexed(object : (Int, String) -> Unit { override fun invoke(i: Int, s: String) { print(list[i]) print(s) }})
冒号
- 声明常量变量的类型
val name: String = "Hello_kotlin"
- 方法的返回类型
fun getPi(): Float{ return 3.14f }
- 类的继承
class Test_Activity(): Activity() { ... }
- 声明常量变量的类型
双冒号
- 表示把一个方法当作一个参数,传递到另一个方法进行使用,也就是引用一个方法
print(::getResult)
- 调用其他class中的某一个方法时
print(otherClass::getResult)
- 调用当前类的方法(一般this可以省略,如果调用的函数是类的成员函数或扩展函数,this不可省略)
print(this::getResult)
- 表示把一个方法当作一个参数,传递到另一个方法进行使用,也就是引用一个方法
符号@的使用
- 类似C中的goto,可以跳到指定的位置,或者在满足条件时跳出指定的循环,支持Lambda表达式
实体类
与Java中实体类不同的是,不需要创建setter/getter
class Person { var name: String? = null var age: String? = null}
调用实体类
val person = Person()//赋值person.name = "kotlin"person.age = "13"//取值val name = person.nameval age = person.age
字符串模板
var result = "My name is ${person.name} and I'm $age years old "
延迟加载
- 流程控制
空判断
//类型后面加?表示可为空var age: String? = "23" //抛出空指针异常val ages = age!!.toInt()//不做处理返回 nullval ages1 = age?.toInt()//age为空返回-1val ages2 = age?.toInt() ?: -1
- 其他
- 父类需要声明为open才能被继承- 没有static 关键字
阅读全文
1 0
- 我的Kotlin成长之路
- 我的成长之路
- 我的sp成长之路
- 我的程序员成长之路
- 2006-2007我的成长之路
- 我的程序员成长之路
- 我的计算机成长之路----栈
- 我的计算机成长之路--链表
- 我的程序员成长之路
- 我的编程成长之路
- 我的PHP成长之路
- 我的linux成长之路
- 我的架构师成长之路
- 我的Java成长之路
- 我的C++成长之路
- 我的IT之路成长故事
- 我的IT成长之路
- 我的It成长之路
- 常见浏览器兼容性问题与解决方案
- swiper.js插件遇到的问题 第二张划不了,只能划动一张
- JSON.parse()和JSON.stringify()
- fig10.3
- javascript Date format(js日期格式化)
- 我的Kotlin成长之路
- As导入新项目 Error:Failed to open zip file. Gradle's dependency cache may be corrupt ...
- iOS 密码输入框
- 使用Android Studio打包遇到的问题
- OC中代理和通知的概念
- Android broadcast 相同优先级的顺序
- 装饰模式【Decorator Pattern】
- maven学习笔记一
- mysql语句总结