Kotlin 入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mengks1987/article/details/83896414

1、引入Kotlin

1、新项目引入

在新建项目的时候勾选Include Kotlin support,如下图
在新建项目的时候勾选Include Kotlin support

2、现有项目引入

Tools->Kotlin->Configure Kotlin in Project

不管如何引入的本质上都是在build.gradle上引用:
project build.gradle:
在这里插入图片描述

在app或者module的build.gradle:
在这里插入图片描述
kotlin-android-extensions 可以让我们不在写findviewbyid,后面会详细介绍。

2、基本语法

1、定义属性

Kotlin中定义属性只有2个关键字:var和val
var:可变变量
val:只读变量

	var name:String = "qwe" //对应Java String name = "qwe";
    var age = 12 //对应Java int age = 12,如果不指定kotlin根据值进行推断
    var a:String //编译不过去,Kotlin 定义属性的时候必须初始化或者使用lateinit
    lateinit var a1:String
    var b:String = null  //编译不过去,属性类型如果不加?则代表此属性不能null
    var c:String? = null
    
    val d = 0 //只读变量
    d = 1 //编译不过去

这些是最基本的,也是我们常用的,当然还有很多细节后面详细说明。

2、定义函数、方法


    fun add(a:Int,b:Int):Int{
        return 0
    }

    override fun equals(other: Any?): Boolean {
        return super.equals(other)
    }

fun:定义方法的关键字
add:方法名
括号内:方法参数,注意参数的类型要放在参数后面,以“:”连接
括号后面接:Int:是返回的类型,如果无返回值可以不写。
override:重写父类方法

对应Java写法:

	int add(int a,int b){
        return 0;
    }

    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }

3 定义class

open class Person constructor(var name:String,var age:Int =1) {

    init {
        //初始化的时候调用
    }

    /**
     * 次构造函数
     * this:必须
     */
    constructor(name: String):this(name,10){

    }
    constructor(name: String,age: Int,sex:String):this(name){

    }
}

class Student(name: String) : Person(name) {

    constructor(name: String, age: Int) : this(name) {

    }
}

    var person = Person("qw")
    var person1 = Person("q",12)

1、定义类的关键字是:class
2、Kotlin的类默认是final,也就是不可被继承,如果想被继承则需要在class前加open关键字。
3、类名后面的constructor()是主构造函数,正常情况下constructor可以省略,但如果在构造函数上有注解则不可省略,比如dagger框架

class DataManager @Inject constructor(){}

4、主构造函数中的参数不需要写get/set方法,访问的时候可以直接这样写:

		var age = person.age //get
        person.age = 100 //set

5、参数可以有默认值,如age
6、init{} 在初始化的时候调用。
7、次构造函数在类体内,并且必须直接或者间接委托主构造函数(this)
8、实例化:不需要new 关键字
9、类的继承(extends)和实现(implements)用 : 代替
10、注意init{}在次构造函数前执行
11、如果没有定义任何主构造函数和次构造函数,系统默认生成一个无参的主构造函数,而且是public的,如果不想要无参构造函数可以这样:

class DontCreateMe private constructor ()

12、构造函数函数可以用默认值,如果所有的参数都有默认值,系统将会生成一个无参的构造函数,参数使用默认值

4、常用的循环控制语句

1、if…else

1、Kotlin中的if…else和Java一样,在Kotin中if…else可以当作表达式

val max = if (a > b) a else b

2、when

	when (x) {
            1 -> print("x == 1")
            2 -> print("x == 2")
            else -> { // Note the block
                print("x is neither 1 nor 2")
            }
        }

	when (x) {
            in 1..10 -> print("x is in the range") // .. 表示 [1,10] until:[1,10)
            !in 10..20 -> print("x is outside the range")
            else -> print("none of the above")
        }

1、when替代Java中的switch,但是比Java中更加强大
2、上面的代码中有in(在范围内),… 表示 [1,10] until:[1,10),这些后面详细介绍

3、for

		for (i in 1..3) {
            println(i)
        }
        for (i in 1 until 3) {
            println(i)
        }
        for (i in 6 downTo 0 step 2) {
            println(i)
        }

        val list = arrayListOf<Int>()
        for (i in list){

        }
        val map = mapOf<String,String>()
        for ((key,value) in map){
        }

1、for循环提供了list、map等的遍历
2、… 表示 [1,10]
3、until:[1,10)
4、downTo :减
5、step:步幅,实例中表示每次-2
6、对于map可以直接使用解构遍历,解构的用法不仅仅用在遍历,后面会详细介绍。

4、while do…while return 等

这些基本和Java一样,不在介绍。

5、基本类型

这些类型和Java基本一样,但Kotlin没有隐式转换

1、数字类型Double、Float、Long、Int、Short、Byte

		 var a: Float = 1.0F
        //a = 1 //不可以隐式转换,编译报错
        a = 1.0.toFloat() //可以显示转换
		
		var b = 123L //L 表示Long类型
        var c = 0x12 //16进制
        var d = 1f
        var e = 1F //f、F表示Float

		var a1 = 1_000_000 //可以使用下划线是数字更具可读性

1、Kotlin 不支持8进制
2、Kotlin 不可以隐式转换
3、可以使用下划线是数字更具可读性

2、String

String最终常用的字符串模版:

var s = "$key,${key.toUpperCase()}abc"

替换Java中String类型相加。
1、字符串模版:${}
2、如果后面只有一个简单的属性名可以省略大括号

5访问权限修饰符 private、protected、internal、public

这些基本和Java一样,不在介绍。

6 常用的集合

	var array :Array<String> = arrayOf()
    var array1 :IntArray = IntArray(10)
    var array2 :ArrayList<String> = arrayListOf()
    var map:Map<String,String> = mapOf<String,String>()
    var map1:HashMap<String,String> = hashMapOf()

1、注意初始化的方式比Java方便。

3 遇到不知道怎么写的怎么办?终极大法

先用java写好,然后Code->Convert Java File to Kotlin File,转过来后记住这种写法,下次就会了。

我们写好了Kotlin code后想看看Kotlin对应的Java写法:
选中Kotlin文件->Tools->Show Kotlin Bytecode:
在这里插入图片描述

点击Decompile:
在这里插入图片描述
这样更加有助于我们学习。

Kotlin的学习资料:https://blog.csdn.net/mengks1987/article/details/78051857

猜你喜欢

转载自blog.csdn.net/mengks1987/article/details/83896414