安卓系列之 kotlin 基础知识(一)

9 篇文章 0 订阅

变量

  1. 格式
    变量定义关键字 变量名:引用类型=值
var a: String = "hello" 
  1. var
    可修改变量
    可以用 lateinit 修饰,延迟初始化变量
  2. val
    只读变量,并非不可变
    只能赋值一次的变量
    局部变量是一个普通变量时,val 相当于 Java 中 final

类型推断

已赋值的变量(包括函数变量)可以省略类型,kotlin 会自动类型推断

变量

函数变量

const 关键字

  1. 相当于 Java 的 public final static
  2. 编译时常量
  3. 只能修饰类属性和顶层属性

in 关键字

range 表达式的关键字

  • in -> 表示在某个区间
  • !in -> 表示不在某个区间里
  • step -> 步长
  • downTo -> 倒数
  • until -> 排除结束元素
for (i in 1..3) print(i)//输出“123”
for (i in 3 downTo 1) print(i) // 打印结果为: "321"
//使用step指定步长
for (i in 1..4 step 2) print(i) //输出“13”
//倒数
for (i in 4 downTo 1 step 2) print(i) //输出“42”
//使用until函数排除结束元素
for (i in 1 until 4) {   //i in [1, 4) 排除了4
    println(i)
} 

is 关键字

如果一个不可变的局部变量或属性已经判断出为某类型,那么检测后的分支中可以直接当作该类型使用,无需显式转换

  • !is -> 不是
  • is -> 是
fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        return obj.length
    }
    return null
} 

when 表达式

  1. 相当于 Java 的 switch case 语句
  2. 分支条件可以多个,可以是基础数据,也可以是表达式
when (obj) {
    1,2 -> "number"
    "hello" -> "string"
    is Long -> "Long"
    !is String -> "Not a string"
    else -> "Unknown"
} 

字符串相关

  1. $ 符号加变量名引用
val a: Int = 1
val s1 = "a is $a" 
  1. ${}可以引用表达式
var a = 1
val s1 = "a is $a"
a = 2
val s2 = "${s1.replace("is", "was")},but now is $a" 
  1. 多行字符串
    三个引号 “”" 扩起来的字符串
//有一些前置空格
val text1 = """
    多行字符串
    多行字符串"""
    
//去除空格,从字符串中每行的开头裁剪指定的字符串参数以及前面的全部空格,如果不提供参数,则以|作为参数默认值
val text2 = """
    |多行字符串
    |多行字符串""".trimMargin("|")

//去除前导空格,切割每一行开头相同数量的空格
val text3 = """
    |多行字符串
    |多行字符串""".trimIndent() 
  1. 字符串截取
    substring 关键字,用于截取字符串功能,可用 range 类型
//字符串截取
val textA = "Hello,There is a good message."
val indexO = textA.indexOf(",")
val firstText = textA.substring(0, indexO)
val twiceText = textA.subSequence(0 until indexO)//支持rang类型 
  1. 字符串切片
    split 关键字,通过某个指定的符号切为 list
//字符串切片
val textB = "num1,num2,num3"
val dataB = textB.split(",")
print("dataB[0]:" + dataB[0] + "dataB[1]:" + dataB[1] + "dataB[2]:" + dataB[2])
val (dataB0, dataB1, dataB2) = textB.split(",")//支持解构
print("dataB0:" + dataB0 + "dataB1:" + dataB1 + "dataB2:" + dataB2) 
  1. 字符串替换
    replace 关键字,指定符号去替代字符串指定位置的内容
//字符串替换
val textC = "Hello,There is a good message."
val dataC = textC.replace("e", "1")
//支持正则表达式和匿名函数
val dataCTwo = textC.replace(Regex("eo")) {
    when (it.value) {
       "e" -> "1"
       "o" -> "2"
       else -> it.value
   }
} 
  1. 字符串比较
    \ ==表示内容是否相同,相当于 Java 的 equal;
    \ ===表示内存堆是否相同,相当于 Java 的 ==;
//字符串比较
val textD = "hello"
val textE = "hello"
print(textD == textE)//ture
print(textD === textE)//ture 
  1. 字符串遍历
    forEach 关键字,用于遍历每一个字符
//字符串遍历
val textF = "Hello,There is a good message."
textF.forEach {
    print(it)
} 

数据类型转换

//安全转化
"1.23".toIntOrNull()
"1".toDoubleOrNull()
//取整
1.23.toInt()
//四舍五入
1.2345.roundToInt()
//转换成字符串
".2%".format(1.234567) 

空安全相关

?=(可空类型)

格式:
变量定义关键字 变量名:引用类型? = 值

var b: String? = null 

?.(安全调用操作符)

若是可空变量为空,则不执行后续方法,若不为空则执行
格式:
变量.?方法

var b: String? = null
b = "elaine"
print(b?.length) 
  • 支持链式调用
var b: String? = null
b = "elaine"
print(b?.substring(2)?.length) 

let(安全调用)

let 函数,可以对变量进行重定义

/**
 * let安全调用
 */
var letTwo: String? = null
var letTwoResult = letTwo?.let {
    if (it.isEmpty()) {
        "数据为空"
    } else {
        it
    }
} 

!!.(非空断言操作符)

若可空变量不为空则执行后续方法,若可空变量为空则会抛出 NPE(nullPointerException)

var b: String? = null
b = "elaine"
print(b!!.length) 

?:(空合并操作符)

又名三目条件操作符,相当于 Java 的 if 条件语句的简写

var b: String? = null
b = "elaine"
print(b?.length ?: 0)

//Java 简写
int a = 0;
int c = a > 0 ? a : -2; 

kotlin 调用 java 的代码

kotlin 调用 java 的代码,因为这样的调用破坏了 Null 安全性机制,所以需要加上?

fun testThree() {
    print(PageTwo.getMsg()?.length)
}

class PageTwo {
    public static String getMsg() {
        return null;
    }
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值