版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36252044/article/details/86661872
前言
- Kotlin自从被Google定义为官方开发语言后,一直很火.那么作为Android开发人员,Kotlin还是有必要学一下的. 那么此Kotlin系列就是记录自己学习Kotlin的过程,希望与大家共勉!
- 我们学习一门语言,我认为最好的方法是从最基础的语法学起.只有知晓了基础的语法,才能去搭建更复杂层次的逻辑结构代码!
-
- 本系列是根据官网的文档来进行的.
-
- 本人水平有限,理解有不妥之处,希望大家多多指教,共同进步!
1.定义包
Kotlin源文件是以.kt 结尾. 文件中引用包的声明处于源文件的顶部
eg:
package lxx.demo
import java.util.*
//....
在这一点上面是和java差不多的.
2.定义函数
函数的写法不同,比如
带有两个Int参数,返回类型是Int的函数
Kotlin写法
fun sum(a: Int,b:Int): Int{
return a + b
}
fun sum(a: Int, b: Int) = a + b
Java写法
int sum(int a, int b){
return a + b;
}
不同
1. 修饰符不同
(1)Kotlin方法前不加修饰符,默认就是public
(2)Java 方法前不加修饰符,默认是default.只能被同包里的类引用,父包和子包都不行.
2. 返回值
(1)Kotlin 中的基本数据类型都是一个对象.因为在Kotlin中,所有东西都是对象. Kotlin中数字类型表示就是 Int.
位置是在 方法括号后面 sum(a:Int,b:Int): Int
(2)Java 中如果要把int类型变为对象,就需要装箱.int i = 1; Integer A = new Integer(i);
位置是在方法名前面
3. 参数顺序
(1)Kotlin中 是方法参数在前 ,间隔一个冒号,然后参数类型在后,多个参数用 逗号 隔开.
sum(a: Int)
(2)Java 中 类型在前,有空格间隔,然后是参数
sum(int a)
4. 结尾
(1)Kotlin 中语句不需要以分号结尾
(2)Java 中 语句必须以分号结尾
3.定义变量
定义局部变量
Kolin写法
fun main(){
val a : Int = 1 // 立即初始化
val b = 2 //自动推导出类型
val c: Int //没有初始化,必须声明类型
c = 3
var x = 5
x += 1
}
Java 写法
main(){
final int a = 1;
int b;
b = 1;
}
不同
变量修饰符
(1)Kotlin 中 用 val 修饰的变量 是不可更改的.而用 var 修饰的变量是可以修改的
(2)Java 中 用final 修饰的变量就变成了常量,也是不可修改的,其他的都是可以修改了. Java中只有常量不可以修改.
4.注释
// 这是一个行注释
/*
这是一个多行
的块注释
*/
不同
Kotlin的块注释可以嵌套,java暂时还不可以
eg:
Kotlin 嵌套块注释
/*
第一层块注释
/*
第二层块注释
/*
第三层块注释
*/
*/
*/
5.使用条件表达式
比较两个int值a,b的大小
Kotlin写法
fun maxOf(a: Int,b: Int): Int{
if(a>b){
return a
}else{
return b
}
}
三元运算符写法,用if作为表达式
fun maxOf(a: Int,b: Int) = if (a>b) a else b
6.可空值 及 null 检测
当某个变量的值可以为null的时候,必须在声明处的类型后加上标识
? 来表示此类型可以为空
eg:
fun parseInt(str: String):Int?{
....
}
把String字符串转为Int型
- 如果传入的不是数字字符串,而是"aaa"这种字符串,那么 此方法的返回值为 null. 我们就可以根据返回值是否为null,来判断传入的入参是够正确
7.类型检测及自动类型转换
is 运算符 用来检测一个表达式是否是某类型的一个实例. 如果检测后判断为该类型,那么在检测后的代码块中可以直接当该类型使用,不用显示转换.
eg:
获取字符串的长度
fun getStringLength(obj: Any):Int?{
if(obj is String && obj.length>0){
//在判断属于String类型后,不用显示转换成String后,直接可以使用 .length
return obj.length
}
return null
}
8. for循环
for循环可以对任何提供迭代器(iterator)的对象进行迭代
Kotlin写法
fun main(){
val items = listOf("a","b","c")
for(item in items){
println(item)
}
//也可以这样写
for(index in items.indices){
println(items[index])
}
}
Java写法
String arr[] = {"a","b","c"};
for(int i = 0;i < arr.length;i++){
prinltn(arr[i]);
}
不同
Kotlin 中用 in 代替,省略了java中一系列赋值
9. while 循环
fun main(){
val items = listOf("a","b","c")
var index = 0
while(index < items.size){
println(items[index])
index++
}
}
此处与java中类似,在判断条件满足的情况下一直运行,一旦不满足就跳出逻辑
10.when 表达式
Kotlin写法
fun describe(obj: Any):String =
when(obj){
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
- 从上往下匹配,一旦符合条件后就会输出 -> 后面的语句, 然后跳出逻辑
Java 写法
when(x > 0){
println("x的值大于0");
}
不同
1.入参
(1)Kotlin中的when表达式我感觉很像java中的switch表达式. 传入一个值和代码块中的值做对比,一致的化就走对应的逻辑.
用 "->" 符号来指定输出内容
(2)Java 中的when 更像一个判断语句,如果符合判断条件就走代码块中的逻辑,否则就不走.
11.区间 range
使用 in 运算符来检测某个数字是否在制定区间内
eg:
val x = 10
val y = 9
if(x in 1..y+1){
println("fits in range")
}
(1)
1..y+1 表示全闭区间类似Java中的
x>=1 && x<=10 [1,10]
(2)
1 until y+1 表示左闭右开类似Java中的
x>=1 && x<10 [1,10)
(3) downTo 表示倒序迭代
(4) step 正序就是加上后面的数字,倒序就是减去后面的数字
eg:
for(x in 1..10 step 3){
print(x +",")
}
- 这里结果是 1, 1+3,1+3+3,1+3+3+3
for(x in 10 downTo 1 step 3){
print(x + ",")
}
- 这里结果是 10,10-3,10-3-3,10-3-3-3
12.集合
fun main(){
val items = setOf("a","b","c")
when{
"ee" in items -> println("Not in")
"a" in items -> println("yeah")
}
}