Kotlin学习(菜鸟教程)

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()
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值