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定义变量只有两种关键字: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条)