class FirstKotlin : AppCompatActivity() {
//val从不修改的变量 var 可修改的变量
val age = 18
var num: Int = 18
//变量默认不能为null,可以添加?
var name: MutableList<Person>? = ArrayList<Person>()
var empty: String? = null
//kotlin必须初始化变量的值,如果不初始化就使用lateinit延迟加载
lateinit var delayStr: String;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.kotlin_view)
num = 19
//if-else 条件表达式,kotlin不包含传统的三元运算符
var sex: String = if (num == 18) {
"男"
} else {
"女"
}
Log.e("LS", "sex---" + sex)
//when
var grade = when {
num == 19 -> 100
num == 18 -> 99
else -> 66
}
Log.e("LS", "grade---" + grade)
//因为name是全局变量,所以存在线程不安全(开2个线程),需要使用安全运算符?
//如果是局部变量,,就可以不使用安全运算符了,即使开2个线程也不影响,因为线程内部不能调用局部变量
// if(name!=null){
// name.toLowese();
// }
if (sex != null) {
sex.toLowerCase();
}
//定义list集合使用MutableList
name?.add(Person("ls", "hh"))
name?.add(Person("ls", "hh"))
//data class的作用是重写了toSting(),但是必须构造方法里面有传参
Log.e("LS", "集合---" + name?.get(0)?.toString());
Log.e("LS", "表达式添加到函数里面---" + getMethod(40))
//匿名函数,该函数的返回类型为:(Sting) -> Int
var department: (String) -> Int = { inputs -> inputs.length }
Log.e("LS", "匿名表达式---" + department("Android"))
Log.e("LS", "高阶函数---" + job("Doctor", { str -> str.length }))
//kotlin可以避免空指针,
// 使用?.就相当于加一个判空条件,不会执行当前语句,调用不会报空指针,
// 若使用!!.则表示你确认该属性值不为空,当属性值为空,就会抛空指针
Log.e("LS", "空指针----" + empty?.toLowerCase())
//SAM,即 Single Abstract Method ,就是对于只有单个非默认抽象方法接口 ,对于符合这个条件的接口称之为 SAM,这是Java 8 里的一个概念,
//Java 中的SAM在 Kotlin 中可以直接用 Lambda 来表示
//OnClickListener 具有单一抽象方法 onClick()
tv_content.setOnClickListener{
Toast.makeText(this, "我被点击了", Toast.LENGTH_LONG).show()
var intent = Intent(this, TestAct::class.java)
startActivity(intent)
}
//伴生对象 companion object 类似于对变量和方法使用 Java 的 static 关键字。
//const作用是static,会重写get方法,若是java调用kotlin的参数,可以直接获取,否则就需要使用FirstKotlin.Companion.getTESTTAG()方法
FirstKotlin.TAG
FirstKotlin.TESTTAG
//kotlin和java互调时,为了保证java传过来的值对应kotlin的可以为空(?.) 则java中使用@Nullable定义参数就可以
//属性初始化 init
//定义匿名内部类
btn.setOnClickListener(object:View.OnClickListener{
override fun onClick(p0: View?) { }
})
//intent跳转
startActivity(Intent(this@MyCameraActivity,MyCameraActivity::class.java))
//定义数组
var str = arrayOf(1,2,3)
var intStr = intArrayOf(1,2,3)//效率更高
}
var inits:String
init {
inits = "123"
}
object TestClass{
const val TAG = "LoginFragment"
val TESTTAG = "LoginFragment"
}
companion object {
const val TAG = "LoginFragment"
val TESTTAG = "LoginFragment"
}
fun getMethod(age: Int): String {
var name = when (age) {
18 -> "少女"
40 -> "妇女"
else -> "婴儿"
}
return name
}
//高阶函数
fun job(doctor: String, doctorMethod: (String) -> Int): Int {
return doctorMethod(doctor)
}
class car(val wheel: List<Wheel>) {
val wheels = listOf<Wheel>()
class Wheel {
}
}
data class Person(val name: String, val sex: String)
override fun onDestroy() {
super.onDestroy()
}
}