Kotlin学习(2)语法(2)

1. 变量和标志符

===========================================================================

kotlin所有的变量类型都是引用类型。

Kotlin的变量分为 val(不可变的)var(可变的),可以简单理解为:

  • val是只读的,仅能一次赋值,后面就不能被重新赋值了

  • var是可写的,在它的声明周期中,它能被赋值很多次

比如:

在这里插入图片描述

而把val->var,这个操作就不会报错。

变量命名规则同Java一样。所以我们平时都遵循驼峰命名法

2. 关键字与修饰符

============================================================================

| 类修饰符 | 说明 |

| — | — |

| final | 不能被继承 |

| open | 可以被继承 |

| abstract | 抽象类 |

| enum | 枚举类 |

| data | 数据类 |

| sealed | 密封类 |

| annotation | 注解类 |

| 成员修饰符 | 说明 |

| — | — |

| override | 重写函数 |

| open | 可被重写 |

| final | 不能被重写 |

| abstract | 抽象函数 |

| lateinit | 后期初始化 |

| 访问修饰符 | 说明 |

| — | — |

| public | 对外可访问 |

| private | 私有,仅当类可访问 |

| protected | 当前类以及继承该类的可访问 |

| internal | 整个模块内可访问 |

| 协变逆变修饰符 | 说明 |

| — | — |

| out | 消费者类型修饰符,out T等价于 ?extend T |

| in | 生产者类型修饰符 in T等价于 ? super T |

别的修饰符很少用到,so以后用到的时候再说吧。

3. 流程控制

=========================================================================

3.1 if表达式


kotlin中的if…else…语句和Java中的略有一些差别。

下面举几个例子:

//一个比较大小的函数

fun max(a: Int, b: Int): Int {

val max = if (a > b) a else b

return max

}

//代码块形式

fun max(a: Int, b: Int): Int {

val max = if(a>b){

print(“max value is a”)

a

}else {

print(“max value is b”)

b

}

return max

}

第一个函数的返回有点像 Java重的 true?1:0三元表达式

但是kotlin没有,所以kotlin 用的是 if() … else …这样实现三元表达式

其他的if用法和Java无异

3.2 when


when表达式和Java中的 switch..case 是类似的。

因为kotlin是极简风格变成,所以它的when比switch写起来更加方便,下面一个例子:

fun caseWhen(obj: Any?) {

when (obj) {

0, 1, 2, 3 -> print(“是0123中的一个”)

“你好” -> print(“是你好”)

else -> print(“什么都不是”)

}

}

其中的 else 相当于 switch-case 中的 default

可以看出来 when语句不用写那么多case,而且可以用任意表达式作为分支条件

3.3 for循环


for循环可以对任何提供迭代器的对象进行遍历

//用in 遍历

for(item in collection){

}

//用索引遍历数组或者list 其中indices存储了数组array的下标

for(i in array.indices){

print(array[i])

}

indices存储了数组的下标。我们也可以用withIndex来遍历下标与对应的元素:

for((index,value) in array.withIndex){

println(“the element at $index is $value”)

}

另外,范围(Ranges)表达式也可以用于循环中:

for(i in 1…10){

println(i)

}

//简写代码为

(1…10).forEach { println(it)}

3.4 while循环


while 和 do…while循环语句的使用方式与C、Java语言基本一致,所以跳过

3.5 continue和break


和Java中的continue和break基本一致,所以跳过

3.6 return返回


和Java一样,有返回值的函数要显示的用 return 去返回一个值。

除此之外,Kotlin还可以用直接使用 “=”来返回一个函数的值,这样的函数成为函数字面量

fun sum(a: Int, b: Int) = a + b

fun max(a: Int, b: Int) = if (a > b) a else b

//也可以声明一个匿名函数

val sum = fun(a: Int, b: Int) = a + b

sum(1,2)

上面的最后一个例子是直接使用表达式来实现函数。需要注意的是,后面的函数体语句中有没有大括号代表的意义完全不同

比如这样的Lambda表达式:

//这样子声明,sumf就是一个高阶函数

val sumf = fun(a: Int, b: Int) = { a + b }

//直接调用的并不会返回结果而是返回一个函数体

sumf(1,2)

() -> kotlin.Int

//如果要调用,得使用invoke方法, 或者 (),它和invoke等价

sumf(1,2).invoke()

sumf(1,2)()

3

如果有括号,就又相当于多了一层函数。直接调用 sumf(1,2)返回的并不是一个int值,而你要在 sum(1,2)的基础上,再去调用一遍方法,才能返回一个int值。

如果有Lambda,则里面的return直接返回最近的外层函数,这个其实很好理解的,return肯定都是返回最近函数体的值呀

结尾

  • 腾讯T4级别Android架构技术脑图;查漏补缺,体系化深入学习提升

img

  • 一线互联网Android面试题含详解(初级到高级专题)

这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率

img

有Android开发3-5年基础,希望突破瓶颈,成为架构师的小伙伴,可以关注我
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
腾讯T4级别Android架构技术脑图;查漏补缺,体系化深入学习提升

[外链图片转存中…(img-hcQYhi8Y-1715720371890)]

  • 一线互联网Android面试题含详解(初级到高级专题)

这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率

[外链图片转存中…(img-n3ljWyfW-1715720371894)]

有Android开发3-5年基础,希望突破瓶颈,成为架构师的小伙伴,可以关注我
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值