Android基础
Android四大组件
? Android四大组件分别是Activity、Service、BroadcastReceiver和ContentProvider。
? Activity:应用程序的门面。
? Service:后台运行
? BroadcastReceiver:允许应用接收来自各处的广播消息
? ContentProvider:为应用程序之间共享数据提供了可能
日志工具Log
? Android中的日志工具类是Log,一共提供了5个方法来供我们打印日志。
- Log.v():打印琐碎的的日志信息,对应级别Verbos
- Log.d():打印调试信息,对应Debug
- Log.i():打印重要的数据,对应info
- Log.w():打印警告信息,对应warn
- Log.e():打印错误信息,对应error
Kotlin入门
变量和函数
变量
? kotlin定义变量只有两种关键字:val和var。
- val:声明一个不可变的变量,在赋值后就不能再重新对其赋值
- var:声明一个可变的变量
fun main(){
val a = 10
var b:Int = 3
}
? kotlin基本变量类型包括Int、Long、Short、Float、Double、Boolean、Char和Byte。
函数
? kotlin允许自定义函数,语法规则如下:
fun methodName(param1:Type, param2:Type):Type{
}
fun add(a:Int, b:Int):int{
return a + b
}
程序逻辑控制
if条件语句
? kotlin中的条件语句主要有两种实现方式:if和when
fun largerNumber(a:Int, b:Int):Int{
var value = 0
if(a > b){
value = a
}else {
value = b
}
return value
}
fun largerNumber(a:Int, b:Int):Int{
var value = 0
value = if(a > b){
a
}else{
b
}
return value
}
fun largerNumber(a:Int, b:Int) = if(a > b) a else b
when条件语句
? 其作用与switch类似
fun getScore(name:String) = if(name == 'Tom'){
90
} else if(name == 'Jim'){
80
} else if(name == 'Jack'){
85
} else{
0
}
fun getScore(name:String) = when(name){
"Tom" -> 90
"Jim" -> 80
"Jack" -> 85
else -> 0
}
fun checkNumber(num : Number){
when(num){
is Int -> println("Int")
is Double -> println("Double")
else println("Error")
}
}
循环语句
? 在kotlin中,使用…表示一个闭区间,可以使用until创建一个左开右闭的区间,然后可以通过for-in循环遍历区间
fun main(){
for(i in 0..10){
println(i)
}
}
fun main(){
for(i in 0 until 10 step 2){
println(i)
}
}
fun main(){
for(i in 10 downTo 1){
println(i)
}
}
面向对象编程
? 面向对象有三大特性:封装、继承和多态
? 通过对类的封装,我们可以在适当的时候创建类的对象,然后调用对象中的字段和函数来满足实际编程的需求。
类与对象
? kotlin中使用class关键字声明类。
class Person{
var name = ""
var age = 0
fun eat(){
}
}
fun main(){
val p = Person()
p.name = "jack"
p.age = 10
p.eat()
}
继承和构造函数
? 和C++继承的概念基本类似
open class Person{
var name = ""
var age = 0
fun eat(){
}
}
class student:Person(){
var sno = ""
var grade = 0
}
? kotlin中构造函数分为主构造函数和次构造函数,主构造函数没有函数体,直接定义在类名的后面就行了。在实例化时,需要加入全部的参数。如果想在主构造函数中添加运行逻辑的话,可以使用init结构体
class Student(val sno:String, val grade:Int):Person(){
init{
}
}
val student = Student("ada", 15)
? 次构造函数通过consturctor关键字来定义。类似于C++中的重载构造函数
class Student(val sno:String, val grade:Int, name:String, age:Int):Person(name, age){
constructor(name:String, age:Int):this("", 0, name, age){}
constructor():this("", 0){}
}
接口
? 接口用于定义一些抽象行为,简单来说就是实现多态。使用interface关键字来实现
interface Study{
fun readBooks()
fun doHomework()
}
class Person:Study{
override fun readBooks(){
todo
}
override fun doHomework(){
todo
}
}
数据类与单例类
数据类
? 数据类通常需要重写equals()、hashCode()、toString()方法。在kotlin中,class前加上data关键字,表明此类是一个数据类。
data class Cellphone(val brand:String, val:price:Double)
单例类
? 在kotlin中创建单例类,只需要将class关键字改成object关键字即可。
object Singleton{
fun singletonTest(){
todo
}
}
Lambda编程
集合的创建和遍历
? 传统中集合主要包含了List、Set和Map等
val list = ArrayList<String>()
list.add("apple")
list.add("Banana")
val list1 = listof("Apple", "Banana")
val list2 = mutableListof("Apple", "Banana")
for(fruit in list){
println(fruit)
}
集合的函数式API
val list = listof("Apple", "Banana", "Orange")
var maxLengthFruit = ""
for(fruit in list){
if(fruit.length > maxLengthFruit.length){
maxLengthFruit = fruit
}
}
val maxLengthFruit1 = list.maxBy{it.length}
Lambda表达式语法结构如下:{参数名1:参数类型,参数名2:参数类型 -> 函数体}
val lambda = {fruit:String->fruit.length}
val maxLengthFruit = list.maxBy(lambda)
空指针检查
? Kotlin默认所有的参数和变量都不可为空。如果想要其可为空,需要在其后面加上?
fun doStudy(study:Study?){
if(study != null){
}else{
}
}
判空辅助工具
? 首先是?.操作符,即当对象不为空时正常调用相应的方法,当为空时什么也不做。
a?.doSomething()
? 其次是?:操作符,左右两边都接收一个表达式,如果左边表达式的结果不为空就返回左边表达式的结果,否则返回右边表达式的结果。
val c = if(a != null){
a
}else{
b
}
val c = a?:b
? 还可以使用let标准函数
fun doStudy(study : Study?){
study?.let{stu->
study.doSomething()
}
}
fun doStudy(study:Study?){
study?.let{
it.doSomething()
}
}
参考书籍
郭霖-第一行代码第三版
|