美文网首页
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 学习日记

    1、Java虚拟机和Dalvik虚拟机的区别?首先虚拟机本身可看作是一个程序,Java虚拟机会把编译好的Java字...

  • 周日 2020-11-15 23:30 - 06:41 晴 06

    2020-11-15 晚上不想学的一天周日 2020-11-15 23:30 - 06:41 晴 06h19m 一...

  • 祺哥竹枝二首

    2020-11-15 (一)竹枝词.褀哥给妈妈过生日 2020-11-15 全家老小笑声高,品酒喝茶海底捞。 长夜...

  • 《金文成〈正蒙〉日记130。2020-11-15》

    《金文成〈正蒙〉日记130。2020-11-15》 今天是庚子丁亥壬戌,十月初一,2020年11月15日星期日。今...

  • ffmpeg_sample解读_transcoding

    title: ffmpeg_sample解读_transcodingdate: 2020-11-15 10:15:...

  • 2020-11-15

    【318号】2020-11-15点赞列表 http://www.jianshu.com/p/36f1a41df6a...

  • 鬼脸一人圆口汉50sc3041

    原创 李大叔 清江风情 2020-11-15 图谱编号:ESB_TP_50_sc3041 直径:~36.4mm 厚...

  • 2020-11-15第26周复盘

    2020-11-15第26周复盘 11.9 认知升级: 行为升级: 11.10 认知升级: 无 行为升级: 无 1...

  • 034-种瓜得瓜,种豆的豆

    2020-11-15 种瓜得瓜,种豆得豆(You reap what you sow) 婚姻关系的经营,如此! 人...

  • 2020-11-15

    [http://]时间管理大约练课件(2020-11-15) 一、引言互动1、时间可以管理吗?时间是不可以管理的,...

网友评论

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

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