Kotlin学习笔记(一)--变量、函数、类型

趁着过年前这几天工作任务不多,赶紧熟悉下kotlin,学习资料是扔物线大神的 kotlin教程

算是直接总结知识点代码。

一.变量

1.变量声明,默认必须初始化

class Sample {

    //默认声明变量必须初始化
    //类型后边加?表示可空类型
    var v: View? = null
    var v1: String = "haha"

    fun test() {
        v.setBackgroundColor(Color.RED)//报错
        v?.setBackgroundColor(Color.RED)//不为空才调用方法
        v!!.setBackgroundColor(Color.RED)//主动声明v一定不为空,
    }

}

2.可以延迟初始化

//延迟初始化————编辑器一开始不再检查是否空,需要合适位置主动初始化
lateinit var v2: View

3.类型推断,kotlin可以不用声明变量的类型,可以推断出类型,但是声明过后不能切换,不是动态语言

//类型推断——可以不用写变量类型
var name = "Jack" //可以主动推断是String类型
var name = 1 //出错

4.val(value)var (variable)

val是只读,变量只赋值一次,类似javafinal,但有不同。
var可读可写

var message = "你好"
val age = 18

5.变量的可见性,kotlin默认是public

二.函数

1.函数声明关键字fun

//冒号后跟返回值,空返回值(java中的void)使用Unit,kotlin可以不写
fun say(message: String): String {
    return "说了一句:$message"
}

2.参数传递要区分是否是可空变量,代码中的参数,声明的是不可空变量,如果传入可空的变量就报错

//修改message为可空类型
//    var message = "你好"
var message: String? = "你好"

//不可空参数,如果传入可空参数,则报错 
fun say(message: String): String {
    return "说了一句:$message"
}

调用

say(message)//报错

3.函数的可见性,kotlin默认也是public,但复写的时候,即override会特殊处理

4.属性的getter/setter

var name = "Jack"
    get() {
        return "I'm$field"//field就是自己
    }
    set(value) {
        field = "rich $value"
    }

三.类型

1.基本类型————数字、字符、布尔值、数组与字符串

var number: Int = 10//还有Double Float Long Short Byte
var char: Char = 'c'
var isFood: Boolean = true
var ages: IntArray = intArrayOf(1, 2, 3)//还有FloatArray DoubleArray CharArray,都属于kotlin 的 built-in函数
var str: String = "Lili"

2.装箱根据场合来确定
对于Int,尽量用不可空变量,避免性能开销

var a: Int = 10 // 不可空类型,不用装箱 unbox
var b: Int? = 10 // 可空类型,需要装箱 box
var list: List<Int> = listOf(1, 2) // int 列表 需要装箱 box

不可空或数组(IntArray、FloatArray等)不用装箱

3.对象

默认是public,可省略不写,继承或者实现接口(如下的 Impl接口) 用 : 连接

class KotlinTestActivity : AppCompatActivity(), Impl {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        println("hello world")
    }

}

4.的构造函数constructor和其他的函数fun区分

5.Kotlin 里的 override 函数的可见性是继承自父类的

6.kotlin默认都是final类型的不可被继承,可用open关键字后就可被继承,但继承的类不是open的,即open不遗传到子类,但override是可以遗传到子类的,如果不需要遗传,可在override的函数前加final

//添加open关键字后,该类可以被继承,注意继承后的类没有open属性
open class KotlinTestActivity : AppCompatActivity(), Impl {

	//加final,关闭了 override 的遗传性
    final override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        println("hello world")
    }

}

7.实例化类

不需要new关键字

var activity: Activity = NewActivity()

四.类型的判断和强转

有子类继承KotlinTestActivity

class SecondActivity : KotlinTestActivity() {
    fun action() {}//子类特有的方法
}

KotlinTestActivity中实例化,用Activity引用,多态调用子类方法

open class KotlinTestActivity : AppCompatActivity(), Impl {

    final override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        println("hello world")
        
        var secondActivity: Activity = SecondActivity()
        secondActivity.action()//多态调用子类方法,报错
    }

}

kotlin中用is关键字来代替javainstanceof,且不需要转换类型,可以直接调用

var secondActivity: Activity = SecondActivity()
if (secondActivity is SecondActivity) {//类型推断
    secondActivity.action()
}

使用强制转换的话可以用as关键字

var secondActivity: Activity = SecondActivity()
(secondActivity as SecondActivity).action()//强制转换成SecondActivity,如果类型转换错误会抛出异常

如果转换失败,会抛出异常,所以可以加非空判断

var secondActivity: Activity = SecondActivity()
(secondActivity as? SecondActivity)?.action()//如果强制转换成功,则调用,否则即为空,就不调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值