第二章 入门Kotlin语言

Kotlin 代码是不用写分号的。

变量和函数

变量

  Kotlin 定义一个变量 只允许在变量前声明两种关键字。val和var
  val:用来声明一个不可变的变量,这种变量在初始赋值之后 再也不能重新赋值。对应Java中的final变量。
  var: 用来声明一个可变的变量,这种变量在初始赋值之后仍然可以在重新被赋值。对应Java中的非final变量。
  val a = 10
  print(a)
  var b = 10
  b = 20
  print(b)
  // 显示定义数据类型
  val c :Int = 11
  print(c)
  // Kotlin中完全抛弃了Java的基本数据类型。全部使用了对象数据类型

函数

  函数定义
  fun getLargeNum(param1:Int, param2:Int): Int {
        return max(param1,param2)
  }
  解释:
     fun 关键字用来声明函数
     getLargeNum 函数名
     param1:Int, param2:Int  ->参数列表
     :Int 定义的函数返回值类型
     {} 内是函数体。
------------------------------------------------------------
  ** 当一个函数中只有一行代码时候,Kotlin可以不必编写函数体,可以直接将唯一的一行代码卸载函数定义的尾部,中间用等号连接
  fun getLargeNum(param1:Int, param2:Int): Int {
        return max(param1,param2)
  } 
  等同于
  fun getLargeNum(param1:Int, param2:Int): Int = max(param1,param2)
  使用这种语法 return关键字省略,由于Kotlin的类型推导机制 可以推断出 max(param1,param2)的返回值类型为Int ,所以函数的返回值类型也可以省略。
  fun getLargeNum(param1:Int, param2:Int) = max(param1,param2)

逻辑控制

  Kotlin条件语句主要有两种实现方式:if和when
  if :
   fun getLargeNum(num1:Int, num2:Int): Int {
        var value = 0 
        if (num1 > num2) {
           value = num1   
        } else {
           value = num2
        }
        return value 
   } 
   Kotlin中if语句是可以有返回值的。 返回值就是if语句每一个条件中最后一行代码的返回值
    上面代码等同于
   fun getLargeNum(num1:Int, num2:Int) : Int {
    var value  = if (num1 > num2) {
           num1   
        } else {
           num2
        }
        return value 
   } 
    value变量是多余的等同于
  fun getLargeNum(num1:Int, num2:Int): Int {
    return if (num1 > num2) {
           num1   
        } else {
           num2
        }
   } 
    又因为 ** 当一个函数中只有一行代码时候,Kotlin可以不必编写函数体,可以直接将唯一的一行代码卸载函数定义的尾部,中间用等号连接 所以代码等同于
  fun getLargeNum(num1:Int, num2:Int) = if (num1 > num2) {
           num1   
        } else {
           num2
        }

  
  when:
    when语句类似于Java中的switch语句,when语句是允许传入一个任意类型的参数,然后可以在when的机构体中定义一系列的条件格式如下:
    匹配值 -> {执行逻辑} 当逻辑只有一行代码是 {} 可以省略 必须要有else 语句

    精确匹配:
      fun getScore(name: String) = when(name) {
            "Tom" -> 96
            "Jerry"-> 80
            else -> 60
     }
    类型匹配 :
        fun checkNum(num: Number) = when (num) {
            is Int -> "111"
            is Double -> "222"
            else -> "333"
        }

循环语句

  kotlin 的循环语句主要有两种 while和for
  kotlin表示区间的方式  val range = 0..10   // 表示0到10 两端闭区间 [0,1,2,3,4,5,6,7,8,9,10]
                       val range = 0 until 10 // 表示0 到 10 前闭后开区间  [0,1,2,3,4,5,6,7,8,9]
  for-in 循环可以是有 step 跳过某些元素
         使用downTo 降序循环
  IDEA创建Kotlin中的File 通常使用用于编写Kotlin顶层函数和扩展函数的

面向对象

  1. 如何定义一个类
        class User {
            var id = 0
            var name = ""
            var age = 0
            fun study () {
                print ("study")
            }
        }
  2. 如何创建一个对象(对象是类的一个实例)
       fun main(args:Array<String>) {
            var person = User()
            person.age = 10
            person.name = "zxy"
            person.id = 1
            print("age=${person.age},name=${person.name},id=${person.id}")
        }
        打印结果如下:
            age=10,name=zxy,id=1
  继承和构造函数
        继承:在Java中一个类是默认可以被继承的,但在Kotlin中任何一个非抽象类默认都是不可以被继承的。相当于Java中的类添加Final关键字。
              若让Kotlin中的类可以被继承需要用open关键字来修饰这个类
              在Java中类的继承是使用extends关键字。在Kotlin中是使用:
        Java中的继承
        public class Person() {
        }
        pubilc class Studnet extends Person {
        }
        Kotlin 中继承
        open class Person() {                   
        }
        class Student: Person() {
        }
        kotlin中的继承父类后面还加一个一对括号
        原因是主构造函数和次构造函数

主构造函数和次构造函数

 ```java
  kotlin 将构造函数分为了主构造函数和次构造函数
  每个类都会有一个不带参数的主构造函数,主构造函数的特点是没有函数体,直接定义在类名后面即可
  ex:
  在主构造函数中声明成val或var的参数将自动成为该类的字段。
  class User (var name : String, var age : Int) {}
  实例化时必须传入构造函数中的所有参数
  val user = User("zxy", 26)
  Kotlin提供了一个init 结构体 所有主构造函数的逻辑都可以写在里面
  Java 继承特性
  子类中的构造函数必须调用父类中的构造函数
  子类的主构造函数调用父类的哪个构造函数,在继承的时候通过括号来指定
  Kotlin规定当一个类中既有次构造函数又有主构造函数时,次构造函数必须调用主构造函数
  次构造函数通过constructor来定义
 ```

单例类、数据类(object data 修饰类)

lambda表达式

标准函数和静态方法。

  1. let
        let是一个函数,将原始对象作为参数传递到lambda表达式中。
  2. with
        with函数接受两个参数 第一个参数是可以是一个任意类型的对象,第二个参数是一个lambda表达式,with函数会在lambda表达式中第一个参数作为对象的上下文,使用lambda表达式中的最后一行代码作为返回值返回。
  3. run
        run函数不能直接调用,必须有一个对象才能被调用,只接受一个参数lambda表达式,调用run函数的对象作为lambda函数的上下文,使用lambda表达式中的最后一行代码作为返回值返回。
  4. apply
        run函数不能直接调用,必须有一个对象才能被调用,只接受一个参数lambda表达式,调用run函数的对象作为lambda函数的上下文,返回的是调用函数的对象本身(返回一个对象)
posted @ 2020-05-26 22:57  zxymapper  阅读(163)  评论(0)    收藏  举报