基本类型、变量、方法、类

2020-08-09  本文已影响0人  lqhunter

一、基本类型

1.数字

Double(64)、Float(32)、Long(64)、Int(32)、Short(16)、Byte(8)

val a = 1 //Int
val b = 3_000_000_000 //Long
val c = 1L //Long
val d: Byte = 1
val pi = 3.14 //Double
val e = 3.1415926f //float

显示转换

//java隐式转换
int c = 1;
double e = c;

//kotlin较小的类型不能隐式转换为较大的类型
val a = 1
val b: Double = a//报错

//显示转化
val b: Double = a.toDouble()

2.字符

Char

//java中字符可以直接当数字使用
int f = 'f';
if (f == 1) {
}
//kotlin不行
val f = 'f'
if (f == 1) {//会报错   
}
//可以显示转换成Int
f.toInt()
3.布尔

Boolean

4.数组
//后面和集合Set Map一起总结
val g: Array<Int> = arrayOf(1, 2, 3)
4.字符串
val name = "jack"

//字符串模板
println("${name}的长度:${name.length}")

二、变量

1.定义一个变量
//java
int a;
String b;

int c = 1;
String d = "dd";

//kotlin
var a: Int = 1
var b = "ss"

//以下错误
var c: String = null
2.延迟初始化
lateinit var c: String
3.var和val
val d = 10
4.空安全设计

有些情况变量无法保证是否为空。

//解除非空的限制,此变量就可以设置为空
var name: String? = null

//解除非空限制,如果初始为非空,后续也可以置空
var name: String? = "aaa"
name = null
var view: View? = null
···
view = findViewById(R.id.image)
//view.setBackgroundColor(0xffffff) //错误
view?.setBackgroundColor(0xffffff) //?会先判空,如果为空,则不执行setBackgroundColor代码

view!!.setBackgroundColor(0xffffff)//告诉编译器不进行非空判断

5.get/set
//定义一个变量,就已经默认自带了get和set方法
var name = "ss"

//相当于
var name = "ss"
    get() {
        return field
    }
    set(value) {
        field = value
    }

//如果需要自定义get/set方法
var name2 = "ss"
    get() {
        return field + "bb"
        //return name2 + "bb" //不可以这样,会报错
    }
    set(value) {
        field = value + "aa"
    }



三、方法

1.方法的声明

fun test(name: String): String {
    ...
}


fun test(name: String, age: Int): Unit {
    ...
}

fun test(name: String, age: Int) {
    ...
}
//有返回值
fun test01(name: String): String {
    return ""
}
//无返回值,Unit相当于void
fun test02(name: String): Unit {
}
//无返回值,Unit省略
fun test03(name: String) {
}
//参数可空
fun test04(name: String?) {
}
2.参数传递
//不可空变量,传入不可空参数里
val name = "11"
test03(name)

//可空变量
val name1: String? = "11"
//test03(name1) //传入不可空参数里,编译器会报错
test04(name1) //传入可空参数里,不会报错

四、类

1.类声明
class demo13 {
}
2.构造函数

主构造函数

class demo14 constructor() {
}

class demo15 constructor(name : String) {   
}
//省略constructor关键字
class demo15(name: String) {
}

//主构造函数,没有函数体,只用于传参数进行初始化,如果需要初始化代码,可以用init代码块
class demo16 constructor(name: String) {
    init {
        //...
    }
}

次构造函数

//无主构造器的情况
class demo17 {
    constructor(name: String) {
    }
}

//主次共存时,次构造器必须直接或间接调用主构造器
class demo18 constructor(age: Int) {

    val currentAge = age
    lateinit var currentName: String

    constructor(name: String, age: Int) : this(age) {
        currentName = name
    }
}

类的继承
kotlin所有类继承自Any

//demo18可以继承必须用open关键字修饰
class demo19 constructor(age: Int) : demo18(age) {
}

//:不仅表示extend,还可以表示implement
interface Imp {
    fun test()
}
//覆盖方法
class demo20 constructor(age: Int) : demo19(age), Imp {
    override fun test() {
    }
}

抽象类

//定义抽象类
abstract class demo22 {
    abstract fun test()
}
//子类
class demo23: demo22() {
    override fun test() {
    }
}
//实例化
fun test01() {
    val demo23 = demo23()
}
//open不具有遗传性,不能影响到子类,override关键字效果可以影响到子类
open class demo24: demo22() {
    override fun test() {
    }
}
class demo26: demo24() {
    override fun test() {//继承之后,仍然可以重写test方法,如果不允许test重写,可以final修饰
        super.test()
    }
}
上一篇 下一篇

猜你喜欢

热点阅读