第一行代码Android(第三版)学习第一天

第一章:开始启程,你的第一行Android代码

1.日志工具的使用

Log.v():用于打印最为烦琐的,意义最小的日志信息。对应级别verbose,是Android日志中级别最低级的一种。

Log.d():用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别debug,比verbose高一级。

Log.i():用于打印一些重要的数据,这些数据应该是你非常想看到的,可以帮你分析用户行为的数据,对应级别info,比debug高一级。

Log.w():用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一些这些警告的地方,对应级别warn,比info高一级。

Log.e():用于打印程序中的错误信息,比如程序进入了catch语句中。当有错误信息打印出来的时候,一般代表你的程序出现严重的问题,必须尽快修复。对应级别error,比warn高一级。

第二章:探究新语言,快速kotlin入门

1.声明:var声明一个可变的变量,val声明一个不可变的变量(优先使用val来声明一个变量,当val没有办法满足需求时再使用var)

2.函数:fun 函数名(变量1:变量1类型,变量2:变量2类型 ......): 返回值类型(可选){}

3.if语句:相对于Java中的if多了一个额外的功能,可以拥有返回值,返回值就是if语句每一个条件中最后一行代码的返回值。

4.when语句:①也可以拥有返回值,when语句允许传入一个任意类型的参数,然后在when的结构体中定义一系列的条件,格式:匹配值 -> {执行逻辑}

②除了精确匹配外,when语句还可以进行类型匹配,其中is是类型匹配的核心,相当于java中的instanceof关键字。

5.for循环 ①区间 0..10表示[0,10]这个区间  0 until 10表示[0,10)

②格式for(  变量 in 区间)

6.继承 父类前加关键字open,子类就可以继承

(例:open fun Person{}  fun Student :Person())

注意①Person后面要加上(),因为Student类的主构造函数在初始化的时候会调用Person的无参构造函数,即使是无参的情况下,()不能省略;

②父类中主构造函数有参数时,子类在继承时也需要加入相应的变量名和变量类型,父类只需要有变量名,不需要变量类型。

(例:open fun Person(val name:String){}  fun Student(name:String) :Person(name))

③次构造函数用constructor关键字来定义

7.接口 接口中的函数不要求有函数体,用interface关键字声明,在类型实现接口的函数时,用override关键字进行声明

8.数据类:用于将服务器或数据库中数据映射到内存中,为编程逻辑提供数据模型的支持。在kotlin中,只需在一个类前面声明了data关键字,就表明你希望这个类是一个数据类,kotlin会根据主构造函数中的参数帮你将equals()、hashCode()、toString()等固定且无实际逻辑意义的方法自动生成。

9.集合 ①List集合:kotlin内置的listOf()函数可以简化集合的初始化写法

(例:val list = listOf("Appel","Orange","Banana"))

listOf()函数创建的是一个不可变的集合,可变集合使用mutableListOf()函数

②Set集合的用法和List集合的用法一样,不同在于Set集合中的元素无法保证有序

③Map集合:是一种键值对形式的数据结构,也可以使用mapOf()和mutableMapOf()

(例:val map = mapOf("Apple" to 1,"Orange" to 2,"Banana" to 3))

遍历(for((fruit,number) in map))

10.集合的函数式API :语法结构:{参数名1:参数类型,参数名2:参数类型 -> 函数体}

(例:val maxlengthFruit = lsit.maxBy({fruit:String -> fruit.length}))

简化:①kotlin规定,当Lambda参数是函数的最后一个参数时,可以将API表达式移到函数括号的外面

(例:val maxlengthFruit = lsit.maxBy(){fruit:String -> fruit.length})

②如果Lambda参数是函数的唯一一个参数的话,可以将函数的括号省略

(例:val maxlengthFruit = lsit.maxBy{fruit:String -> fruit.length})

③Lambda表达式的参数列表大多数情况下不必声明参数的类型

(例:val maxlengthFruit = lsit.maxBy{fruit-> fruit.length})

④当lambda表达式的参数列表只有一个参数时,也不必声明参数名,可以用it关键字来代替

(例:val maxlengthFruit = lsit.maxBy{ it.length })

11.空指针检查 ①可空类型:在类名的后面加上一个问号

{例:Int表示不可空,Int?表示可空}

②判空辅助工具:?. ?:

(例:fun getTextLength(text:String?) = text?.length ?: 0)

首先由于text是可空的,因此我们在调用它的length字段时需要使用 ?. 操作符,当text为空时,text.length会返回一个null值,这时借助 ?: 操作符让其返回0

③非空断言工具 !!,在对象的后面加上  !!,这是一种风险写法,意在告诉kotlin,我确信这里不为空,不用进行空指针检查,若出现问题,直接抛出异常,我自己承担后果。

④let函数:提供了函数式API的编程接口,将原始调用对象作为参数传递到lambda表达式中

{例:obj.let{obj2 ->  (具体的业务逻辑)}}

let函数是可以处理全局变量的判空问题

12.字符串内嵌表达式:用${},当表达式中仅有一个变量时,大括号也可以省略

{例:"Hello,${obj.name}"}   --->{"Hello,$name"}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值