美文网首页
类、控制流

类、控制流

作者: lqhunter | 来源:发表于2020-08-11 18:42 被阅读0次

//补充;可见性修饰符


java可见性修饰符.png
  • private:内部可见

  • protected:内部可见 + 子类可见

  • internal :模块内可见

  • public:全部可见,如果不加修饰,默认是public

嵌套类

嵌套类相当于java的静态内部类(static class),kotlin取消了static关键字

  • 嵌套类不能访问外部类的其他成员
class demo21 {
    class bb {
    }

    fun test() {
        val bb = demo21.bb()
    }
}
内部类

内部类相当于java中没有使用static修饰的内部类。使用inner关键字修饰。

  • 内部类成员可以直接访问外部类的私有数据,因为内部类相当于外部类的成员之一;
  • 外部类不能访问内部类的成员,如需访问,需要通过创建内部类对象,通过对象访问内部类成员。
class demo21 {
    var name = "ss"

    inner class aa {
        val cc = 1
        fun t() {
            name = "aa"
        }
    }

    fun test() {
        val aa = demo21().aa()
    }

}
匿名内部类

object关键字:创建一个类,并且创建这个类的对象

//对象表达式
object : [父类] {
    //对象表达式类体
}


open class OnClickListener {
    open fun click() {
    }
}
fun test() {
    val cc = object : OnClickListener() {
        override fun click() {
            //TODO
        }
    }
}

object还可以用于单例

object DataManager {

    lateinit var context: Context

    fun init(context: Context) {
        this.context = context
    }

    fun getName(): String {
        return "aa"
    }

}


fun main() {
    println(DataManager.getName())
}

伴生对象
当中的属性和方法是静态的,可以用类名.xx的方式调用

class Demo24 {
    companion object {
        val age = 100
        fun eat() {

        }
    }
}

fun test() {
    Demo24.age
    Demo24.eat()
}
数据类
  • 主构造函数需要至少有一个参数;
  • 主构造函数的所有参数需要标记为 val 或 var;
  • 数据类不能是abstract、open、inner的
data class User(var name: String)
  • equals(): 它可以比较两个对象的属性来确保他们是相同的。
  • hashCode(): 我们可以得到一个hash值,也是从属性中计算出来的。
  • copy(): 你可以拷贝一个对象,可以根据你的需要去修改里面的属性。
枚举类
enum class Color {
    RED, GREEN, BLUE
}

每个枚举常量都是一个对象,都是枚举类的实例,可以这样实例化

enum class Color(val rgb: Int) {
        RED(0xFF0000),
        GREEN(0x00FF00),
        BLUE(0x0000FF)
}

密封类

  • 所有子类都必须在与密封类自身相同的文件中声明
  • 一个密封类是自身抽象的,它不能直接实例化并可以有抽象(abstract)成员
  • 密封类不允许有非private构造函数(其构造函数默认为 private
sealed class Animal {
    abstract val name: String
}

class Bird : Animal() {
    fun eat() {
        println(name + "吃了虫子")
    }

    override val name: String
        get() = "Bird"
}

class Dog : Animal() {
    fun eat() {
        println(name + "吃了骨头")
    }

    override val name: String
        get() = "Dog"
}

使用密封类的关键好处在于使用 when表达式的时候,如果能够验证语句覆盖了所有情况,就不需要为该语句再添加一个 else 子句了

fun animalEat(animal: Animal) {
    when (animal) {
        is Bird -> animal.eat()
        is Dog -> animal.eat()
    }
}
拓展方法、属性

扩展一个类的新功能而无需继承该类

fun File.getMd5(): String {
    //计算MD5
    return ""
}

fun check() {
    val file = File("/data/aa.txt")
    if (file.exists()) {
        val md5 = file.getMd5()
    }
}
顶层声明

kotlin允许将方法和属性不写在类体里面

//Demo25.kt文件
package com.lq.kotlindemo.demo02

fun getName(): String {
    return NAME
}

const val NAME = "jack"

class Demo25 {

    fun test() {
        println(getName())
    }
}
条件控制 if、when

if表达式

//可以和java一样使用
fun test(a: Int) {
    val c: Int
    if (a > 0) {
        c = 1
    } else {
        c = 0
    }
}

//作为表达式使用,就有表达式对应的返回值
fun test1(a: Int) {
    val c: Int
    c = if (a > 0) {
        1
    } else {
        0
    }
}
//再简化,相当于三目运算符
fun test2(a: Int) {
    val c = if (a > 0) 1 else 0
}

when表达式

//类似于switch
fun test03(a: Int) {
    val c = when (a) {
        1 -> 100
        2 -> 200
        else -> 300
    }
}

//如果不提供参数,分支条件为bool表达式,则可以替换if..else使用
fun test2(a: Int) {
    val c = if (a > 0) 1 else 0

    val d = when {
        a > 0 -> 1
        else -> 0
    }
}
循环控制 for、while

for循环

//区间[0,10]
for (i in 0..10) {
}
//区间[0,10)
for (i in 0 until 10) {
}
//步长
val a = 0 until 10
for (i in a step 2) {
}
//倒序[10,1]
for (i in 10 downTo 1) {
}

while循环
与java相同

相关文章

  • 类、控制流

    类 //补充;可见性修饰符 private:内部可见 protected:内部可见 + 子类可见 internal...

  • Java并发编程笔记(五):同步工具类

    同步工具类即用来控制并发,协调线程控制流的工具类,BlockingQueue因为提供了take,put等阻塞方法,...

  • Kotlin 学习总结

    Kotlin 学习笔记 基本数值类型 集合 控制流 函数 类

  • 9.控制流(theControlFlow)

    控制流 kotlin_控制流 swift控制流

  • 【课程笔记】南大软件分析课程5——过程间分析(课时7)

    目录: Motivation 调用图构建 过程间控制流分析 过程间数据流分析 重点: 学习如何利用类层级分析来构建...

  • Python | 常用的控制流语句

    一、控制流语句介绍 了解什么是控制流语句以及Python常用的两种控制流语句。 1.控制流语句 控制流语句即用来实...

  • 程序员点滴一

    java语言hello word分析。难点 开发工具 各种单词数据类型控制流函数类数组类库(线程 网络 图形 ...

  • JDK8中Stream及Optional学习笔记

    Stream流 普通循环写法,迭代在外部进行流式写法,迭代由内部控制,内部迭代将更多控制权交给了集合类 Strea...

  • 教程收集:Kotlin学历

    作者:Pape 初识基础控制流类与对象抽象类与接口可见性修饰符特殊类扩展与委托委托属性空安全函数与Lambda表达...

  • 控制流

    上一篇:基础运算当前篇:控制流下一篇:集合类型 从大体来讲控制流分为条件语句和循环语句,而这两种语句差不多就是程序...

网友评论

      本文标题:类、控制流

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