学习笔记,仅记录和Java不一样的地方
可见性
- default,public:能见到类声明的
- private:相同class可见
- protected:相同class及子类可见
- internal:能见到类声明的 本模块内 的任何客户端都可见
变量方法定义
var a = 1
var s = "asd"
var s : String = "asd"
var s : String ?= null
laterinit var s : String
var与val
var 是可变变量
val 只读变量,不能提供set方法
位操作符
- shl(bits) – 左移位 (Java’s <<)
- shr(bits) – 右移位 (Java’s >>)
- ushr(bits) – 无符号右移位 (Java’s >>>)
- and(bits) – 与
- or(bits) – 或
- xor(bits) – 异或
- inv() – 反向
非空机制
字段后加 !!:如果字段为空,则抛出空指针异常
另一种字段后加 ? :可不做处理返回值为 null或配合 ?: 做空判断处理
//类型后面加?表示可为空
var age: String? = "23"
//抛出空指针异常
val ages = age!!.toInt()
//不做处理返回 null
val ages1 = age?.toInt()
//age为空返回-1
val ages2 = age?.toInt() ?: -1
判断字段是否初始化
::wifiList.isInitialized
集合
创建(只读方式:不可增删元素)
val mapp = mapof("key" to 24,"name" to "zhangsan","age" to 25) val setTea: Set<String> = setOf("E", "F", "B", "C", "A", "D", "F", "B") val bookA = Book("A", 20, "Jone") val bookB = Book("B", 21, "Green") val bookC = Book("C", 22, "Mark") val bookD = Book("D", 23, "Node") val bookE = Book("E", 24, "Blue") val listBook = listOf<Book>(bookA, bookB, bookC, bookD, bookE)
增删元素(转换成以下三个才可以)
MutableList MutableSet MutableMap
循环与条件控制
if 可以使用区间
val x = 5
val y = 9
if (x in 1..8) {
println(“x 在区间内”)
}
类与接口
接口里面可以有非抽象方法
静态方法与变量
使用companion object {} 包裹的,就是静态方法和字段
companion object {
val EXTRA_PARAM_MAC_ADDRESS = "EXTRA_PARAM_MAC_ADDRESS"
val EXTRA_PARAM_WIFI_NAME = "EXTRA_PARAM_WIFI_NAME"
fun getCallingIntent(activity: BaseActivity, deviceInfo: WiFiDeviceInfo?):Intent{
var intent = Intent()
intent.setClass(activity,WiFIUpdateActivity::class.java)
intent.putExtra(EXTRA_PARAM_MAC_ADDRESS,deviceInfo?.deviceId)
intent.putExtra(EXTRA_PARAM_WIFI_NAME,deviceInfo?.deviceInfo)
return intent
}
}
构造方法
第一构造方法中的输入参数,可以在init函数块中取出来
也可以使用constructor生成第二构造方法
泛型
使用 : 表示,可以接受子类
open class BasePresenter<V : BaseView> {
var view: V ? = null;
fun attachView(view: V) {
this.view = view
}
}
内置函数let apply等
这些内置函数可以进行一些初始化的操作
apply的返回值是对象自身,对象的方法写在apply里面,可以让代码显得紧凑,逻辑更清晰