美文网首页
Kotlin学习笔记

Kotlin学习笔记

作者: 何夜无月_xhc | 来源:发表于2018-10-24 21:02 被阅读0次

## Kotlin学习笔记

---

## 数据基础

可**多次赋值**变量类型:**var** <标识符> : <类型> = <初始化值>

只能初始化**一次赋值**变量类型:**val** <标识符> : <类型> = <初始化值>

### 数据类型

- 基本数值类型:`Byte、Short、Int、Long、Float、Double`

- 常见数值表现形式:`0b00101011、12、12L、0x9A、12.3f、12.3e10`

- 字符:Char

### 数据类型转化

    toByte()、 toShort()、toInt()、toLong()、toFloat()、toDouble()、toChar(): Char

### 数值运算

- 位运算

```

    shl(bits) – 左移位 (Java’s <<)

    shr(bits) – 右移位 (Java’s >>)

    ushr(bits) – 无符号右移位 (Java’s >>>)

    and(bits) – 与

    or(bits) – 或

    xor(bits) – 异或

    inv() – 反向

```

- 逻辑

```

|| – 短路逻辑或

&& – 短路逻辑与

! - 逻辑非

```

### 数组

- 数组定义与使用

```

    val a=arrayOf(1,2,3);//[1,2,3] 通过函数arrayOf创建

    val b=Array(3,{i->(i*2)});//[0,2,4] 通过Array创建

    val c:IntArray=intArrayOf(1,2,3);//[1,2,3] 通过具体类型的intArrayOf创建

```

### 字符串

- 基础字符串str的使用

```

      方式1:str[0]='c';

      方式2:for(c in str) println(c);

  ```

  - 多行字符串

  ```

      val text="""

        字符串

        字符串

        """

```

- 字符串模板

    通俗来讲就是在字符串中间加入一段以$开头的表达式,运算结果加入到字符串中,很显然,s字符串的值为"a+b=3";为防止混淆,在字符串中如果需要使用$符号需要写成`${'$'}`

  ```

      val a=1;

      val b=2;

      val s="a+b=${a+b}"

  ```

## 函数使用

### 函数

- 函数通过以下方式定义

> fun functionName(a:Int,b:Short):Int{

    > return 0;

> }

- 定义与使用示例

```

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

        return a + b;

    }

    fun main() {

        println("Hello, world!!!"+calculate(3,4));

    }

```

> 结果输出 `Hello, world!!!7`

### 简化函数

fun calculate(a:Int, b:Int):Int=a+b;

### Lambda表达式(匿名函数)

- 不太熟悉,后续用到再重新补充此部分。

fun main(args: Array<String>) {

    val sumLambda: (Int, Int) -> Int = {x,y -> x+y}

    println(sumLambda(1,2))  // 输出 3

}

### 参数

如上,普通函数直接写明类型即可;

- 可变长的参数

  fun func(vararg v:Int){};通过这种形式传进的v是一个数组,但传参的时候不需要考虑func()函数接收的长度,直接func(1,2,3,4,5,6)调用。

### IF、WHEN、FOR的使用

- 常规(略)

- 区间使用,可在in关键字前加!表示不在区间内

if(i in 1..4)print(i);//输出i的值

for(i in 1..4)print(i);//输出1234

for(i in 1..4 step 2)print(i);//指定步长,输出13

for(i in 4 downTo 1 step 2)print(i);//逆向遍历区间,输出42

for(i in 1 until 4)print(i);//排除结尾元素,输出123

- 类型检测

if(obj is String){return obj.length;}

- when的使用(类似于switch)

```

    when(a){

      1-> print("hello1");

      2,3-> print("hello3");

      in 4..6 ->print("hello tom");

      else->{

            print("fuck")

      }

    }

```

- for 遍历数组names

` for(name in names)print(name);`

`for(i in names.indices)print("$i is ${names[i]}");`

第一个通过名字遍历,直接输出tom、bob等

第二个通过序号遍历,输出序号和对应位置的值:1 is tom、2 is bob等

- 标签使用,break或continue后接标签可以直接结束循环回到标签处,执行下一步

```

testBiaoQian for(){

  for(){

    break@testBiaoQian

    }}

```

## 几点需要注意的

### Null处理

var a:int?=1; //定义时类型后加?说明数据可为空

var b:a!!.toInt();//对可能为空的情况后面加!!表示抛出异常

## 类的使用

### 基本

- 定义类

class AClass{}

- 定义属性和成员函数

class AClass{

var a:Int =0;

fun foo(){print("hello");}

}

-使用类

val aclass=AClass();

val b:Int =aclass.a

aclass.foo();

示例

```

      class Person {

          var lastName: String = "zhang"

              get() = field.toUpperCase()  // 将变量赋值后转换为大写

              set

          var no: Int = 100

              get() = field                // 后端变量

              set(value) {

                  if (value < 10) {      // 如果传入的值小于 10 返回该值

                      field = value

                  } else {

                      field = -1        // 如果传入的值大于等于 10 返回 -1

                  }

              }

          var heiht: Float = 145.4f

              private set

      }

      // 测试

      fun main(args: Array<String>) {

          var person: Person = Person()

          person.lastName = "wang"

          println("lastName:${person.lastName}")

          person.no = 9

          println("no:${person.no}")

          person.no = 20

          println("no:${person.no}")

      }

```

### 深入

  #### 待补充

相关文章

网友评论

      本文标题:Kotlin学习笔记

      本文链接:https://www.haomeiwen.com/subject/dgfftqtx.html