控制流:if、when、for、while
[TOC]
控制流:if、when、for、whileIf 表达式在 Kotlin 中,if{: .keyword }是一个表达式,即它会返回一个值。因此就不需要三元运算符(条件 ? 然后 : 否则),因为普通的 if{: .keyword } 就能胜任这个角色。
1234567891011121314// 传统用法var max = a if (a < b) max = b// With else var max: Intif (a > b) { max = a} else { max = b} // 作为表达式val max = if (a > b) a else b
if{: .keyword }的分支可以是代码块,最后的表达式作为该块的值:
1234567val max = if (a > b) { print("Choose a") a} else { print("Choose b") b}
...
Kotlin学习之关键字与操作符
[TOC]
关键字与操作符硬关键字以下符号会始终解释为关键字,不能用作标识符:
as
用于类型转换
为导入指定一个别名
as? 用于安全类型转换
break 终止循环的执行
class 声明一个类
continue 继续最近层循环的下一步
do 开始一个 do/while 循环(后置条件的循环)
else 定义一个 if 表达式条件为 false 时执行的分支
false 指定布尔类型的“假”值
for 开始一个 for 循环
fun 声明一个函数
if 开始一个 if 表达式
in
指定在 for 循环中迭代的对象
用作中缀操作符以检测一个值属于一个区间、一个集合或者其他定义“contains”方法的实体
在 when 表达式中用于上述目的
将一个类型参数标记为逆变
!in
用作中缀操作符以检测一个值不属于一个区间、一个集合或者其他定义“contains”方法的实体
在 when 表达式中用于上述目的
interface 声明一个接口
is
检测一个值具有指定类型
在 when 表达式中用于上述目的
!is
检测一个值不具有指定类型
在 when ...
Kotlin学习之for循环的实现
[TOC]
概述在Kotlin中想遍历1-100的数值可以这样写:
123for (index in 1..100){ print(index)}
这样写是正序遍历,如果想倒序遍历就该使用标准库中定义的downTo()函数:
123for (index in 100 downTo 1){ print(index)}
想不使用1作为遍历的步长,可以使用step()函数:
123for (index in 1..100 step 2){ print(index)//会输出1..3..5......}
要创建一个不包含末尾元素的区间:
123for (index in 1 until 10){ println(index)//输出0..9}
遍历一个数组/列表,想同时取出下标和元素:
1234val array = arrayOf("a", "b", "c") for ((index,e) in ar ...
Android之SELinux安全机制基础
[TOC]
概述Android在调试的时候,我们有时候需要查查已经安装的应用,列出包名等一些APK的安装的信息。
这个时候,我们就需要用到pm的命令。
1adb shell pm list packages -[option]
查看已经安装的应用,列出包名我们可以通过pm命令来查看已经安装的APK。后面加不同的后缀输出不同信息。
1234567891011121314151617181920adb shell pm list packages //查看当前连接设备或者虚拟机的所有包adb shell pm list packages -d //只输出禁用的包。adb shell pm list packages -e //只输出启用的包。adb shell pm list packages -s //只输出系统的包。adb shell pm list packages -i //只输出包和安装信息(安装来源)。adb shell pm list packages -u //只输出包和未安装包信息(安装来源)。adb shell pm list packag ...
Android之ADB调试命令相关
[TOC]
概述 SDK的Tools文件夹下包含着Android模拟器操作的重要命令adb。adb的全称为(Android Debug Bridge)就是调试桥的作用。通过adb我们可以在Android Studio中方面通过DDMS来调试Android程序。借助这个工具,我们可以管理设备或手机模拟器的状态。还可以进行以下的操作:
快速更新设备或手机模拟器中的代码,如应用或Android 系统升级;
在设备上运行shell命令;
管理设备或手机模拟器上的预定端口;
在设备或手机模拟器上复制或粘贴文件;
基础命令查看ADB版本号
1234(py36) baiduiov@FreweniUbuntuBaidu:~$ adb --versionAndroid Debug Bridge version 1.0.39Version 1:8.1.0+r23-5~18.04Installed as /usr/lib/android-sdk/platform-tools/adb
下面我们来看一下,我们常用的ADB命令,主要如下:
12345678910111213 ...
Kotlin中字符串的对比
[TOC]
概述
Kotlin之数组的基础学习
[TOC]
文章参考:https://www.kotlincn.net/docs/reference/basic-types.html
文章参考:https://zhuanlan.zhihu.com/p/26520055
Kotlin 中的数组采用 Array 类定义,抛弃了类 C 语言中 “元素类型[]”的定义方式。下面我们详细讲讲如何在 Kotlin 中使用数组:
数组在 Kotlin 中使用 Array 类来表示,它定义了 get 与 set 函数(按照运算符重载约定这会转变为 [])以及 size 属性,以及一些其他有用的成员函数:
12345678class Array<T> private constructor() { val size: Int operator fun get(index: Int): T operator fun set(index: Int, value: T): Unit operator fun iterator(): Iterator<T> // ……}
我们可以使 ...
Kotlin之类与继承
[TOC]
Kotlin 中使用关键字 class 声明类
1class ClassName { ... }
类声明由类名、类头(指定其类型参数、主构造函数等)以及由花括号包围的类体构成。类头与类体都是可选的; 如果一个类没有类体,可以省略花括号。
1class Empty
构造函数在 Kotlin 中的一个类可以有一个主构造函数以及一个或多个次构造函数。主构造函数是类头的一部分:它跟在类名(与可选的类型参数)后,使用constructor修饰。
1class Person constructor(firstName: String) { ... }
如果主构造函数没有任何注解或者可见性修饰符,可以省略这个 constructor 关键字。
1class Person(firstName: String) { ... }
主构造函数不能包含任何的代码。初始化的代码可以放到以 init 关键字作为前缀的初始化块(initializer blocks)中。
在实例初始化期间,初始化块按照它们出现在类体中的顺序执行,与属性初始化 ...
Kotlin基础之属性与字段
[TOC]
属性与字段声明属性Kotlin 类中的属性既可以用关键字 var 声明为可变的,也可以用关键字 val 声明为只读的。
1234567class Address { var name: String = …… var street: String = …… var city: String = …… var state: String? = …… var zip: String = ……}
要使用一个属性,只要用名称引用它即可,就像 Java 中的字段:
1234567fun copyAddress(address: Address): Address { val result = Address() // Kotlin 中没有“new”关键字 result.name = address.name // 将调用访问器。使用点语法访问 result.street = address.street // …… return result}
Getters 与 Setters声明一 ...
接口的学习
[TOC]
接口Kotlin 的接口可以既包含抽象方法的声明也包含实现。与抽象类不同的是,接口无法保存状态。它可以有属性但必须声明为抽象或提供访问器实现。
使用关键字 interface来定义接口
123456interface MyInterface { fun bar() fun foo() { // 可选的方法体 }}
实现接口一个类或者对象可以实现一个或多个接口。
12345class Child : MyInterface { override fun bar() { // 方法体 }}
接口中的属性你可以在接口中定义属性。在接口中声明的属性要么是抽象的,要么提供访问器的实现。在接口中声明的属性不能有幕后字段(backing field),因此接口中声明的访问器不能引用它们。
1234567891011121314interface MyInterface { val prop: Int // 抽象的 val prop ...