Kotlin入门第一节

入门

package com.fyx.s1

fun main() {
    println("Hello World")
}

声明变量

  • var 标识可读可写
  • name 变量名
  • String 变量类型
  • "Tom" 默认值
fun main() {
    var name: String = "Tom"
    println(name)

    name = "Jack"
    println(name)
}`

常用类型

Kotlin Java 描述
Int Intger 整型
Double double 小数
Float float 小数
String String 字符串
Char char 单字符
Boolean boolean 布尔值
List List 集合
Set Set 不可重复集合
Map Map 键值对

val 只读变量

val用于声明只读变量,不可修改

package com.fyx.s1

fun main() {
    val name: String = "Tom"
    println(name)
    //报错
    name = "Jack"
}

类型推断

声明变量不需要声明类型,Kotlin根据值来自动推断类型

fun main() {
    //等同于 val name: String ="范源鑫"
    val name="范源鑫"
    //等同于 val flag: Boolean =true
    var flag=true
}

编译时常量

编译时常量只能定义在函数之外,使用const 定义

package com.fyx.s1

//编译时常量 使用const + val 组成
const val name ="Jack"

fun main() {
   //报错
   const val name="范源鑫"
}

运行原理

Kotlin运行底层是将代码转换成复合JVM编译的代码执行的
在这里插入图片描述
Kotlin代码
在这里插入图片描述
Kotlin字节码
在这里插入图片描述
JVM可执行代码

在这里插入图片描述

引用类型

  • java语言有两种数据类型一种是基本类型(int double等) 一种是引用类型(String等)
  • 而在Kotlin语言只有一种,看起来是引用类型,但是在编译期间会自动转换为基本类型

Kotlin代码

package com.fyx.s1
fun main() {
    var age: Int =13;
    var level: Float =13.01f
}

编译后的代码

package com.fyx.s1;

import kotlin.Metadata;

@Metadata(
   mv = {1, 1, 16},
   bv = {1, 0, 3},
   k = 2,
   d1 = {"\u0000\b\n\u0000\n\u0002\u0010\u0002\n\u0000\u001a\u0006\u0010\u0000\u001a\u00020\u0001¨\u0006\u0002"},
   d2 = {"main", "", "kt_base"}
)
public final class KtBase1Kt {
   public static final void main() {
      int age = true;
      float level = 13.01F;
   }

   // $FF: synthetic method
   public static void main(String[] var0) {
      main();
   }
}

由此可见JVM会默认将看似是引用过类型转换为基本数据类型

range 表达式

range 范围 从哪里 到哪里

package com.fyx.s1

fun main() {
    var age=18
    if(age in 10..18){
        println("如花")`在这里插入代码片`
    }else if(age in 19..29){
        println("人妻")
    }else if(age in 30..39){
        println("母老虎")
    }else {
        println("不是人")
    }
}

when 表达式

类比Java中的Switch

package com.fyx.s1
fun main() {

    var age = 10

    val mes = when (age) {
        1 -> "今天是周一"
        2 -> "今天是周二"
        3 -> "今天是周三"
        else -> "什么都不是"
    }
    println(mes)
}

字符串模板和if表达式

package com.fyx.s1


fun main() {
    var park="人民路"
    var foot="蛋炒饭"
    println("今天我去了$park 吃了一顿$foot 味道很不错")

    //kt的if表达式更加灵活 这里类比Java中单三元运算符
    var flag =true
    println("你真的很${if(flag) "很漂亮" else "不漂亮"}")
}

Kotlin中定义函数

默认不写修饰符是 public

  • fun 声明函数
  • kotlin 函数是现有入参再由出参,这里跟java是相反的
package com.fyx.s1

fun main() {
    println(convert("小西",18))
}

fun convert(name: String, age: Int): String {
    println("我的名字是$name, 我今年$age 岁了");
    return  "我的名字是$name, 我今年$age 岁了"
}

函数默认值

  • 有默认值的函数该参数可传可不传
fun main() {
    println(convert("小西",18))
    println(convert("小西"))
}

fun convert(name: String, age: Int=19): String {
    return  "我的名字是$name, 我今年$age 岁了"
}

具名参数

  • 具名参数的意义在于不需要按照函数的字段顺序传入,只需要和参数的名称保持一致即可
package com.fyx.s1


fun main() {
    convert(age=20,name="老王")
}

fun convert(name: String, age: Int=19): String {
    return  "我的名字是$name, 我今年$age 岁了"
}
posted @ 2022-04-12 16:57  xiye1  阅读(27)  评论(0)    收藏  举报