美文网首页
2020-11-15 学习日记

2020-11-15 学习日记

作者: 橙子6193 | 来源:发表于2020-11-15 18:48 被阅读0次

    1、Java虚拟机和Dalvik虚拟机的区别?
    首先虚拟机本身可看作是一个程序,Java虚拟机会把编译好的Java字节码转成机器码,在机器上运行;Dalvik执行的是Dalvik字节码,所有的Dalvik字节码由Java字节码转换而来,并被打包到一个Dex文件中(谁来转换和打包呢?),Dalvik通过解释执行这些Dalvik字节码来执行程序
    2、Dalvik虚拟机和ART虚拟机区别?
    Dalvik虚拟机采用的是及时编译技术,即每次执行程序都是边翻译Dalvi字节码边执行,而ART虚拟机是在编译时就把所有的Dalvik字节码转成了机器码,以后每次执行程序只需要直接执行这些机器码即可;ART就是空间换时间,存储空间提高了10%-20%,安装时间也长了
    3、 Kotlin中if和java的区别
    用法基本一样,唯一区别是kotlin中if是可以返回值的
    4、Kotlin中when的作用
    可以很好替代java中的switch,具体不再说了
    5、Kotlin循环

        /** 循环 **/
        fun xunhuan(){
            /** 依次输出[0,10]元素 **/
            for(i in 0..10){
                println(i)
            }
            /** 依次输出[0,10)元素 **/
            for(i in 0 until 10){
                println(i)
            }
            /** 依次输出[10,0]元素 **/
            for(i in 10 downTo 0){
                println(i)
            }
            /** 依次输出[0,10](每次+2)元素 **/
            for(i in 0..10 step 2){
                println(i)
            }
        }
    

    6、kotlin中的继承
    6.1主构造函数
    首先kotlin类默认是不可继承的,如果想要使一个类可以被继承,需要加上open关键字;类的主构造函数都直接跟在class关键字后面,如果需要在构造函数执行时做些初始化操作,可以使用init{初始化操作}:

    open class Person(name:String, age:Int){
        init{
            println("persion-name:$name")
            println("persion-age:$age")
        }
    }
    class Student(sex:String, name: String, age: Int):Person(name,age){
        init {
            println("student-name:$name")
            println("student-age:$age")
            println("student-sex:$sex")
        }
    }
    val student=Student("男","wjc",23)
    

    6.2次构造函数
    kotlin中允许有次构造函数而没有主构造函数,此时因为没有了主构造函数,所以声明时不需要在class后面加参数之类的而且也不用在父类后面跟()了,只需要在次构造函数里调用super父类构造函数即可:

    class Driver : Person {
        constructor(level: String, name: String, age: Int) : super(name, age)
    }
    val driver=Driver("高级司机","jwc",22)
    

    7、接口
    接口使用和Java基本一样,只是实现接口关键字由implements变成了':'(继承也是),然后还允许接口中方法有默认实现,有默认实现的方法可以不用必须重写:

    interface TestInterface {
        fun doTask1()
        fun doTask2(){
            println("默认整理课件")
        }
    }
    
    class Teacher : TestInterface {
        override fun doTask1() {
            println("批改作业")
        }
    }
    val teacher=Teacher()
            teacher.doTask1()
            teacher.doTask2()
    

    8、java和kotlin中函数可见修饰符对比:

    修饰符 java kotlin
    public 所有类可见 所有类可见(默认)
    private 当前类可见 当前类可见
    protected 当前类、子类同一包路径下的类可见 当前类、子类可见
    default 同一包路径下的类可见(默认)
    internal 同一模块的类可见

    9、数据类
    在class前面加上data关键字即可,kotlin会知道我们希望创建一个数据类,然后在后面跟随对应的参数名字和类型即可(当类中没有任何代码时,{}也可以省掉),就不用再重写equals这种方法了,主要两个数据类对象的各个参数值相等,那么它们就是相等的:

    data class DataTest(val name:String)
    val data1=DataTest("data")
    val data2=DataTest("data")
    println(data1==data2) //结果输出true
    

    10、单例类
    直接创建Object类型的类,即是单例类:

    object Danli {
        var count=1;
        fun get(){
            println(count)
            count++
        }
    }
    /** 输出1、2、3、4 **/
    for (i in 0..3){
         Danli.get()
    }
    

    11、Lambda表达式

    //1、创建数组并读取元素(不能添加元素)
    val list= listOf("ww","wa")
    for (o in list)
        println(o)
    //2、创建数组并添加、读取元素
    val list= mutableListOf("ww","wa")
    list.add("dafa")
    for (o in list)
        println(o)
    //3、set用法一样,不再多说
    //map,也不能添加元素,只能读
    val map = mapOf("1" to 1, "2" to 2, 3 to 3)
    for ((key, value) in map) {
        println("key=$key,value=$value")
    }
    //map,可以添加元素
    val map = mutableMapOf("1" to 1, "2" to 2, 3 to 3)
    map["89"]=89
    for ((key, value) in map) {
        println("key=$key,value=$value")
    }
    

    12、集合中的lambda表达式
    {参数名:参数类型,参数名:参数类型...->函数体(最后一行会作为结果返回)}
    常用的:
    list.maxBy{it.length()}:遍历集合取条件的最大值
    list.filter{it.length<5}:遍历集合取符合条件的元素
    list.map{it.toUpperCase()}:遍历集合对集合中元素进行转换
    list.any{it.length<5}:遍历集合判断集合中是否有任一元素满足条件
    list.all{it.length<5}:遍历集合判断集合中元素是否都满足条件
    13、kotlin匿名函数

    //需要使用object关键字
    Thread(object :Runnable{
                override fun run() {
                    TODO("Not yet implemented")
                }
    
            }).start()
    //可以转成lambda表达式
    Thread(Runnable { TODO("Not yet implemented") }).start()
    Thread { TODO("Not yet implemented") }.start()
    

    14、kotlin判空

            //判空操作
            var a:String?=""//代表a有可能为null
            a?.length//如果a为空返回null,否则返回a.length
            a!!.length//表示a绝对不会为空
            a?:"空"//如果a不为null就取a,为null就取后边的
            doTask(null)
            private fun doTask(person: TestInterface?) {
            //let表达式适合判断全局变量以及一次判空后续不再重复判空的情况
            person?.let { person ->
                person.doTask1()
                person.doTask2()
                  }
            }
    

    15、参数指定名字
    kotlin中如果方法的参数有默认值,则该参数可以不传值:

    fun ts(num:Int=1,ss:String){
    
    }
    ts(ss="da")//调用时指定参数名
    

    相关文章

      网友评论

          本文标题:2020-11-15 学习日记

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