Kotlin课程整理(看完就入门了)

入门的东西很少,没有必要去看视频,看一下文章一下午也就解决了

1、首先是变量的声明

两个关键字:var(变量) val(常量)

基本数据类型:Int, Short, Double,Long,Float,String

var a:Int =2

var b:String ="3"

当然Kotlin有一个比较牛逼的功能:智能类型推断。

var a=2

var b="3"

系统自动默认a为整形,b为字符串,b=a会报错

2、函数的声明

关键字:fun

fun function1(){}

fun function2(var a:Int,var b:Int):Int{

return a+b }

var function3={a:Int,b:Int->a+b}

var function4:(Int,Int)->Int={a,b->a+b}

调用function3和function4时和调用function2是一样的,function3(1,2)即可

3、类的声明

关键字:class ,object,enum,interface

class Son{}//没有参数

class Son(var a:Int,var b:Int){var c:Int =2}//参数可以直接在类名后面的括号里声明,也可以在类体里面声明

object Son{}  //object声明的事单例的类

enum Son{"a","b"}//枚举

interface Son{ fun eat()}//接口

4、字符串模版

fun stringCopy(placeName:String){

var diary=""" 今天去${placeName}游玩 """

 }

关键词${}将想要替换字符串的东西放进大括号里就可以了,三个引号和一个引号暂时没有看出区别

5、字符串比较

var a="AAA"   var b="aaa"

a.equals(b)    

a.equals(b,true)//第二个参数是指是否忽略大小写的差别,默认为false

6、kotlin的空值处理

var numStr=readLine()

var num=numStr.toInt()//会报错,因为numStr可能是空,在numStr!!.toInt()  !!表示保证不为空

var num=numStr?.toInt()//不会报错,但是在操作该num运算的时候会报错

fun obtainNum(var numStr?:String){}//?表示该参数不可以为空

7、when表达式(和java的switch很相似)

when(num){

1->println("1")

2->println("2")

else->println("3")

 }

when方法里必须有else

8、循环和区间

//循环和区间
fun main(args: Array) {
    var nums=1..100//1到100
    for (num in nums)//关键字in
    println(num)

    for (num in nums step 5)//间隔打印
        println(num)
    var nums2=nums.reversed()//倒序排列
    for (num in nums2)
        println(num)

    var nums3=1 until 20//前闭后开区间
    for (num in nums3)
        println(num)
}

9、List和Map

var list=listof()("aaa","bbb","ccc")

for((i,e) in list.withIndex())

println("$i $e")//打印出下标和内容,还有各种顺序的打印不一一说明


var map=TreeMap()

map["a"]="AAA"

map["b"]="BBB"

println(map["a"])

10、异常处理(和java区别不大)

使用try{}catch(e:Exception){}

也可以使用throw

11、递归和尾递归优化

fun fact(num: Int): Int {//递归
    if (num == 1) {
        return 1
    } else {
        return num * fact(num - 1)
    }
}

/**
 *
 *尾递归优化,递归次数过大时,计算机会自动停止执行,并报错,
 *尾递归要求:1、递归调用的函数必须是函数本身
 *关键字 tailrec
 */
tailrec fun ollAdd(num: Int, result: Int): Int {

    if (num == 0) {
        return result
    } else {
        return ollAdd(num - 1, result + num)
    }

}

12、继承和印章类

关键字:abstruct(有抽象方法的类必须也用abstruct修饰)

open class A(var name:String){

open fun eat(){} }

B是A的父类,则写成:class A :B{}     A类需要用open修饰才能被继承,其中可以背重写的方法也要用open修饰

若有参数的继承,则写成:class A(name:String):B(name){}

/**
 * 印章类就是子类的种类是有限多个
 * 关键字sealed ,在class之前
 * 类中要指定印章类的子类
 * 印章类没有构造函数,因此不能直接被实例化,只能通过其子类来实例化,如:var s1:Son=Son()会报错,var s1:Son=Son.GrandSon()
 */
sealed class Son{
    class GrandDaughter:Son()
    class GrandSon:Son()
}
fun main(args: Array) {
    var s1:Son=Son.GrandDaughter()
    var s2:Son =Son.GrandSon()
}

13、代理和委托

/**
 * 代理表现在执行此A类方法时调用的却是B类的方法,但是A和B必须实现了相同的接口
 * 只需要在A类实现接口语句后面添加 by B(),如A和B都实现了C接口,则如下:class A : C by B(){}
 * 单例表示运行空间里最多只有一个此类的实例,比如B类,则只需要在B类声明的时候将class关键字修改成object即可,在其实例化的时候不要带括号
 * 如:object B :C{}    class A : C by B {}即可
 */

fun main(args: Array) {
    var father=XiaotouFather()
    father.eat()
}



你可能感兴趣的:(Kotlin学习记录)