20220422-安卓基础学习(1)

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//显式告诉编译器其类型为Int
}

​ 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
}
//在kotlin中if是可以有返回值的,其返回值是最后一行代码的返回值
fun largerNumber(a:Int, b:Int):Int{
    var value = 0
    value = if(a > b){
        a
    }else{
        b
    }
    return value
}

//在kotlin中可进一步简化
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)
        //输出0、1、2、3、4、5、6、7、8、9、10
    }
}

fun main(){
    for(i in 0 until 10 step 2){
        println(i)
        //输出0、2、4、8
    }
}
//使用downTo创建一个降序的区间
fun main(){
    for(i in 10 downTo 1){
        println(i)
        //输出10、9、8、7、6、5、4、3、2、1
    }
}

面向对象编程

​ 面向对象有三大特性:封装、继承和多态

​ 通过对类的封装,我们可以在适当的时候创建类的对象,然后调用对象中的字段和函数来满足实际编程的需求。

类与对象

​ kotlin中使用class关键字声明类。

class Person{
    var name = ""
    var age = 0
    fun eat(){
        //Todo()
    }
}

fun main(){
    val p = Person()
    p.name = "jack"
    p.age = 10
    p.eat()
}

继承和构造函数

​ 和C++继承的概念基本类似

open class Person{
    var name = ""
    var age = 0
    fun eat(){
        //Todo()
    }
}
//kotlin中默认无法继承,如果想要被继承需要在class前加上open关键字
class student:Person(){
    var sno = ""
    var grade = 0
}

​ kotlin中构造函数分为主构造函数和次构造函数,主构造函数没有函数体,直接定义在类名的后面就行了。在实例化时,需要加入全部的参数。如果想在主构造函数中添加运行逻辑的话,可以使用init结构体

class Student(val sno:String, val grade:Int):Person(){
    init{
        //todo
    }
}
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会自动生成上述几个函数

单例类

​ 在kotlin中创建单例类,只需要将class关键字改成object关键字即可。

object Singleton{
    fun singletonTest(){
        todo
    }
}

Lambda编程

集合的创建和遍历

​ 传统中集合主要包含了List、Set和Map等

val list = ArrayList<String>()
list.add("apple")
list.add("Banana")
//或者使用listof,不过listof表示一个不可变的集合,即不能添加、修改和删除
val list1 = listof("Apple", "Banana")
//如果想要可变的,可以使用mutableListOf()
val list2 = mutableListof("Apple", "Banana")
for(fruit in list){
    println(fruit)
}

//set map和C++中的set、map无太大区别

集合的函数式API

val list = listof("Apple", "Banana", "Orange")
var maxLengthFruit = ""
for(fruit in list){
    if(fruit.length > maxLengthFruit.length){
        maxLengthFruit = fruit
    }
}

//如果使用函数式API的话则很简单
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()      
    }   
}
//如果只有一个参数时,可以省略且用it代替
fun doStudy(study:Study?){
    study?.let{
        it.doSomething()
    }
}

参考书籍

郭霖-第一行代码第三版

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值