欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Kotlin

程序员文章站 2022-04-26 15:50:10
...

一、变量和常量

1.1 常量的定义:关键字val

方式1:

val a:Int=1 //声明一个值为1的int型常量

方式2:

val a =1 //自动判断a为int型常量

方式3:

val a:Int //定义时可以先不赋值,此时一定要给定类型
a=1 //赋值,常量只能赋值一次,再次赋值会报错

1.2 变量:关键字var

和常量一样,3种方式声明。只是变量可以再次赋值。

二、基本类型

2.1数值

基本和java一致。注意:字符在 Kotlin 中不是数值类型

数值之间不支持隐式转换,需要做显式转换

val a :Int =1
var b:Long = a 

这样赋值会报错:
Kotlin

不同类型的数值之间需要做显式转换:

var a :Int =1
var b:Long = a.toLong()

数值都具备转换到其他类型数值的方法:

toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char

2.2 字符

字符类型用 Char 表示。不能直接当做数值来使用。

2.3 布尔值

2.4 array

2.5 字符串

字符串不可变,字符串可以用for循环遍历
常规意义的字符串(双引号包裹):

var str = "hello \n world "

三引号包裹的字符串

var str2 = """
            val text= "xxxx"
            for(value in text){
               Log.d(TAG, value)
            }
            \n
        """

字符串模板

$取值

val i = 10
val s = "i = $i" // 识别为 "i = 10"

${}取对象属性,方法等

var i = 100
//通过$取i值,通过${}取i.toLong()的值
//最终打印出log: i = 100 , iLong = 100
Log.d(TAG, "i = $i , iLong = ${i.toLong()}" )

三、包

一个源文件以包声明开始:

package minjiang.demo

import android.app.Activity
import android.os.Bundle
import kotlin.minjiang.com.kotlindemo.R

class KotlinMain : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_kotlin_main)
    }

}

如果没有指定包名,那这个文件的内容就从属于没有名字的 “default” 包。

导入文件:import foo.Bar
导入包:import foo.*
解决多个文件重名引起的冲突: import xx as xx

import foo.Bar // Bar 可以使用
import bar.Bar as bBar // bBar 代表 'bar.Bar'

四、流程控制

4.1 if

1 基本用法和java类似

2 if else 作为三元表达式

val a=5
val b=10
var max = if(a>b) a else b

3 if else 作为块 ,最后一个表达代表值

var max2 = if(a>b){
    Log.d("KotlinMain","max2 is a")
    a
}else{
    Log.d("KotlinMain","max2 is b")
    b
}

4.2 when表达式

4.3 for

item in array

for (item in collection)
    print(item)
for (item: Int in ints){
    //...
}

index in array

for (i in array.indices)
    print(array[i])

4.4 while

和java一样

4.5 返回和跳转

五、类和对象

5.1 类

类大体包含:类名,类头,类主体

class+类名

class Person

添加类主体

class Person{

}

添加主构造函数

class Person constructor(var firstName:String){

}

constructor在没有注解,没有可见性声明的时候可以省略, 如下:

class Person(var firstName:String){

}

主构造函数不能包含任意代码。初始化代码可以放在以 init 做前缀的初始化块内

class Person constructor(var firstName:String){
    init {
        Log.d("Person","init")
    }

}

二级构造函数:

如果类有主构造函数,每个二级构造函数都要,或直接或间接通过另一个二级构造函数代理主构造函数。在同一个类中代理另一个构造函数使用 this 关键字:

有主构造函数,有二级构造

class Person(val firstName: String) {
    init {
        Log.d("Person", "init")
    }

    //二级构造函数,代理主构造函数
    constructor(firstName: String, age: Int) : this(firstName) {

    }

    //二级构造函数,代理上一个二级改造函数
    constructor(firstName: String, age: Int, weight: Int) : this(firstName, age) {

    }
}

没有主构造函数

    //二级构造函数,代理主构造函数
    constructor(firstName: String)  {

    }

    //二级构造函数,代理主构造函数
    constructor(firstName: String, age: Int) : this(firstName) {

    }

    //二级构造函数,代理上一个二级改造函数
    constructor(firstName: String, age: Int, weight: Int) : this(firstName, age) {

    }

如果一个非抽象类没有声明构造函数(主构造函数或二级构造函数),它会产生一个没有参数的构造函数。该构造函数的可见性是 public 。如果你不想你的类有公共的构造函数,你就得声明一个拥有非默认可见性的空主构造函数:

class Person private constructor(){
}

继承

默认类是final,需要添加open来设置类可继承

//class 默认为final ,需要显式设置open
open class Person(){
}

//man 继承person
class Man :Person(){

}
相关标签: kotlin