Kotlin之开始体验0-19(第一篇)

0、这些系统的学习Kotlin,不过不想按部就班,而是想到哪学到哪,看不懂哪里就学在哪里

 

1、我司产品,新需求,均采用Kotlin开发,原谅我总想打成Kotalin,大家也要注意了

Kotlin、Kotlin、Kotlin,写上三遍,还能忘掉?

 

2、Kotlin文件最顶端的package关键字,是倒入包,与java的区别在于,已经不再写分号了,牛13

package com.cmcm.user.login.view.activity

等同于java中的

package com.cmcm.user.login.view.activity;

 

3、倒入类同样也把分号干掉了,牛13

import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.graphics.Bitmap
import android.os.Bundle

 

4、类的一个定义,与java相比省略了public,现在我们引入Kotlin中类的一个语法规则

class SlidingBlockVerifyActivity : BaseActivity(), View.OnClickListener, View.OnTouchListener, SlidingBlockVerifyPresenter.Companion.Callback {

}

final类:不能被继承

Kotlin中没有添加修饰符直接以class开头的都是final类,并且是public

也就是说SlidingBlockVerifyActivity是个final类,也是public

 

5、让我们继续类的一点知识

class SlidingBlockVerifyActivity : BaseActivity(), View.OnClickListener, View.OnTouchListener, SlidingBlockVerifyPresenter.Companion.Callback {

}

等同于java中的

public final class SlidingBlockVerifyActivity extends  BaseActivity implements View.OnClickListener, View.OnTouchListener, SlidingBlockVerityPresenter.Companion.Callback{

}


因为java中没有Companion这个关键字,所以,java中,假设为静态内部类哈

关键字仍然是class

:后面跟的是父类

逗号隔开父类,其父类的后面都是实现的接口

父类:BaseActivity()

接口:View.OnClickListener, View.OnTouchListener, SlidingBlockVerifyPresenter.Companion.Callback

总结一下

SlidingBlockVerifyActivity继承了一个父类,实现了三个接口

 

6、这是关于Kotlin中变量的知识:var与val

var mSlidingPercent: Int = 0
    var mCheckPicId: String = "0"
    var mDownX: Int = 0
    var mMobile: String? = "0"
    var mBgFinish = false
    var mBlockFinish = false
    var mVerifySuccess = false

在Kotlin中,变量使用var修饰,只要是变量一定是var修饰

var、var、var,  要写三遍

语法规则:var 变量名: 变量类型 = 初始值

例如:

var mCheckPicId: String = "0" 

等同于java中的

String mCheckPicId = "0";

感觉变量类型在初始化的时候可以省略哈,感觉,慢慢再去看

在看val的语法规则

在Kotlin中,val修饰的变量,就是常量

val mCheckFlag:String ="hello world"

等同与java中的

final String mCheckFlag = "hello world";

………………………………………………………………………………华丽丽分割线……………………………………………………………………

val mDefaultWidth = 277
val mDefaultHeight = 492

等同于

final int mDefaultWidth = 277;
final int mDefaultHeight = 492;

 

7、访问权限先放一放,另外在Kotlin中的类是可以直接继承Java中的类,牛13,就是这么形成

 

8、Kotlin中的companion,看这B形,就知道这是个关键字了,而且目前我所知,java中肯定没有这个关键字

a、

companion object {
        val REQUEST_DEFAULT: Int = 1001
        val PARAMS_MOBILE: String = "params_mobile"

        fun launchActivityForResult(context: Activity, moblie: String, requestCode: Int) {
            val intent = Intent(context, SlidingBlockVerifyActivity::class.java)
            intent.putExtra(PARAMS_MOBILE, moblie)
            context.startActivityForResult(intent, requestCode)
        }
    }

9、第九条,决定放个Tips:

如果不知道如何在Kotlin中写一个相当简单的Java表达式。这里有一个简单的诀窍,就是在AndroidStudio的Java文件中编写一段代码,然后将其粘贴到kt文件中,它会自动转换为Kotlin。

 

10、Kotlin的优势

a、易表现:可以编写少得多的代码

b、更安全:Kotlin对null是安全的,就是说在编译期间就处理了各种null的情况,避免了运行时的异常。节约很多调试NullPointerException的时间

c、易扩展:就算我们没有权限去访问这个类中的代码,我们可以扩展这个类,以获得更多的特性

d、函数式:虽然Kotlin是基于面向对象的语言,但它使用了很多函数式编程但概念,例如使用lambda表达式(懵逼中),其中很棒但特性就是Collections但处理方式

e、兼容性:可以继续使用所有java写但代码和库,一个项目中,可以使用Kotlin和Java两种语言混合编程(公司产品)

 

11、看个Kotlin中的实体类,即Bean,有多牛逼

a、Kotlin中的数据类,即data修饰的,会自动生成所有属性和它们的public API,并自动生成对应的equals,hashCode、toString方法,这么牛比?

data class User(
     var id: Long,
     var name: String,
     var headUrl: String,)

相当于java中的

public class User{
      private long id;
      private String name;
      private String headUrl;

      public void setId(long id){
             this.id = id;
      }

      public long getId(){
             return id;
      }

      public void setName(String name){
              this.name = name;
      }

      public String getName(){
              return name;
      }

      public void setHeadUrl(String headUrl){
              this.headUrl = headUrl;
      }

      public String getHeadUrl(){
              return headUrl;
      }

      @Override 
    public String toString() {
        return "User{" +
          "id=" + id +
          ", name='" + name + '\'' +
          ", headUrl='" + headUrl + '\''
         '}';
    }

}

 

12、null安全

背景:为了规避NullPoniterException,我们只有不停的判断 != null

a、但是在Kotlin中,是null安全的

b、安全调用操作符   ? 对没错就是一个问号

c、如果mRtcEngine为null,就返回null,如果不是才调用leaveChannel方法,绝对不会抛出NullPointerException

mRtcEngine?.leaveChannel()

13、可空类型与非可空类型,通过问号来明确指定一个对象是否可以为null

var a: String = "abc" //非可空类型,不得向 a = null
private var mRtcEngine: RtcEngine? = null  //可空类型 可以 mRtcEngine = null 

14、lateinit关键字

我去,这个关键字是啥意思啊,头回见

正式名字:延迟加载,延迟初始化

作用: 在某个一定能执行的代码块中进行初始化,否则编译会有不通过的提示,切记哦,必须得初始化

private lateinit var mLeftFragment: Fragment

15、!! 操作符

我去!!,这又是什么?

val l = b!!.length

作用:如果b为null,就会抛出NullPointerException

16、override,不必问

等同于java中的@override

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

17、const关键字

干哈的?

a、有了val,怎么又提供了一个const

b、const只能修饰val,不能修饰var

c、经过const修饰的属性只能同样用拼接const修饰的属性去拼接

d、经过const修饰的常量,才是java中理解的常量

companion object {
        const val IS_SHOW_BLOCK_FRIENDS_DIALOG = "is_show_block_friends_dialog"//是否是第一次注册时
    }

18、$,美元符号的用法

作用1:拼接字符串

const val testName = "ZhangSan"

const val constNameNormal: String = "constNameNormal$testName"

19、fun关键字,funcation的前面三个字母,代表方法。。

你可能感兴趣的:(Kotlin,综合)