kotlin笔记第一阶段(变量&语句&函数)

kotlin笔记第一阶段(变量&语句&函数)

笔记所在视频地址

02、Kotlin语言成为Android第一语言

在这里插入图片描述

03、Kotlin语言和JVM虚拟机

在这里插入图片描述

04、学Kotlin语言的重要性

在这里插入图片描述

05、 kotlin语言的跨平台特性

在这里插入图片描述

06、Kotlin语言学习的技巧

在这里插入图片描述

07、kotlin语言声明变量于内置数据类型

在这里插入图片描述

package com.derry.s1
// TODO 07.kotlin语言声明变量于内置数据类型
fun main() {

    println("Hello world")

    //TODO ============= 声明变量

    /*
         可读可改  变量名   类型       值     (kotlin声明变量与java相反是先声明变量名,在声明类型。)
         var      name : String = "Derry"
    */
    var name : String = "Derry"
    name = "Lance"
    println(name)

    //TODO ============= 内置数据类型
    /*
        String        字符串
        Char          单字符
        Boolean       true/false
        Int           整形
        Double        小数
        List          集合
        Set           无重复的元素集合
        Map           键值对的集合

        Int ---> java int     (编译器在编译过程中会将kotlin的Int类最终转成java的int)
        Float ---> java float   (编译器在编译过程中会将kotlin的Float类最终转成java的float)
        其他类似
    */

08.kotlin 语言的只读变量

在这里插入图片描述

// TODO 08.kotlin语言的只读变量
fun main() {
    // var info :String = "Mhyinfo"
    // var 默认提示:变量永远不会修改,建议改为 val == 不可改变的(只读
    val info :String = "Mhyinfo"
    println(info)
    /*
    只读  变量名   类型   值
    val  age :   Int = 99
    */
    val age : Int = 99
    println(age)
}

4.kotlin 语言的类型推断

在这里插入图片描述

// TODO 08.kotlin语言的类型推断
fun main() {
    //提示:Explicitly given type is redundant here
    //     显示给定的类型在这里是多余的
    val info : String = "Derry is Success"
    println(info)

    val age = 98
    println(age)

    val  xxx =  "A"
}

5.kotlin语言的编译时常量

在这里插入图片描述

// TODO 10.kotlin语言的编译时常量
const val PI = 3.1415926  // 定义编译时常量

// TODO 10.kotlin语言的编译时常量
// 编译时常量只能是常用的数据类型:(String. Double. Int. Float. Long. Short. Byte. Char. Boolean)
// 编译时常量只能在函数之外定义,为什么? 答:如果在行数之内定义,就必须在运行时才能调用函数赋值,何来编译时常量一说
// 结论:编译时常量只能在函数之外定义,就可以在编译期间初始了
fun main() {
    val a = "Derry info" //这个称为 只读类型的变量

    // 提示:修饰符constant不适用于 局部变量
    // const val PI = 45

    // const val PI2 = 3.1415 //定义编译时常量
}

11.学习查看Kotlin反编译后字节码

在这里插入图片描述

查看Kotlin反编译后字节码方法

在这里插入图片描述

const val PI1 = 3.1415926
const val PI2 = 3.1415926
const val age = 3.1415926


// TODO 10.学习查看Kotlin反编译后字节码
fun main() {
    val name = "Derry"
    val number = 108
    val number2 = 208
    val isOK = false
}

反编译后的字节码文件(编译器在编译过程中会将kotlin代码转成java代码)

//                 D : double类型 
public final static D PI1 = 3.1415926
// ================com/derry/s1/KtBase11Kt.class =================
// class version 50.0 (50)
// access flags 0x31
public final class com/derry/s1/KtBase11Kt {


  // access flags 0x19
  public final static D PI1 = 3.1415926

  // access flags 0x19
  public final static D PI2 = 3.1415926

  // access flags 0x19
  public final static D age = 3.1415926

  // access flags 0x19
  public final static main()V
   L0
    LINENUMBER 10 L0
    LDC "Derry"
    ASTORE 0
   L1
    LINENUMBER 11 L1
    BIPUSH 108
    ISTORE 1
   L2
    LINENUMBER 12 L2
    SIPUSH 208
    ISTORE 2
   L3
    LINENUMBER 13 L3
    ICONST_0
    ISTORE 3
   L4
    LINENUMBER 14 L4
    RETURN
   L5
    LOCALVARIABLE isOK Z L4 L5 3
    LOCALVARIABLE number2 I L3 L5 2
    LOCALVARIABLE number I L2 L5 1
    LOCALVARIABLE name Ljava/lang/String; L1 L5 0
    MAXSTACK = 1
    MAXLOCALS = 4

  // access flags 0x1009
  public static synthetic main([Ljava/lang/String;)V
    INVOKESTATIC com/derry/s1/KtBase11Kt.main ()V
    RETURN
    MAXSTACK = 0
    MAXLOCALS = 1

  @Lkotlin/Metadata;(mv={1, 1, 16}, bv={1, 0, 3}, k=2, d1={"\u0000\u0010\n\u0000\n\u0002\u0010\u0006\n\u0002\u0008\u0003\n\u0002\u0010\u0002\n\u0000\u001a\u0006\u0010\u0004\u001a\u00020\u0005\"\u000e\u0010\u0000\u001a\u00020\u0001X\u0086T\u00a2\u0006\u0002\n\u0000\"\u000e\u0010\u0002\u001a\u00020\u0001X\u0086T\u00a2\u0006\u0002\n\u0000\"\u000e\u0010\u0003\u001a\u00020\u0001X\u0086T\u00a2\u0006\u0002\n\u0000\u00a8\u0006\u0006"}, d2={"PI1", "", "PI2", "age", "main", "", "Kotlin_Text"})
  // compiled from: KtBase11.kt
}


// ================META-INF/Kotlin_Text.kotlin_module =================
            

com.derry.s1
KtBase11Kt

12、Kotlin语言的引用类型学习

在这里插入图片描述

// TODO 12.Kotlin语言的引用类型学习
// Java语言有两种数据类型
//      第一种:基本类型:int double等
//      第二种:引用类型 String等

// Kotlin语言只有一种数据类型
//       看起来都是引用类型,实际上编译器会在Java字节码中,修改成"基本类型"
fun main() {
    val age: Int = 99
    val PI: Float  = 3.1415f
    val PI2: Double  = 3.1415
    val isOK: Boolean = true
}

以下进入kotlin语法阶段

13、Kotlin语言的range表达式

在这里插入图片描述

// TODO 13.Kotlin语言的range表达式
fun main() {
    val number = 148
    //range 范围 从哪里 到哪里

    if(number in 10..59){
        println("不及格")
    } else if (number in 0..9){
        println("不及格且分数很差")
    } else if(number in 60..100){
        println("合格")
    } else if (number !in 0..100){
        println("分数不在0到100范围内")
    }
}

14、Kotlin语言when表达式

在这里插入图片描述

// TODO 14.Kotlin语言when表达式
fun main() {
    val week = 8

    //Java的 if 语句
    //KT 的 if 是表达式 有返回值的

    val info = when(week){
        1 -> "今天是星期一,非常忙碌的一天开会"
        2 -> "今天是星期二,非常辛苦的写需求"
        3 -> "今天是星期三,努力写Bug中"
        4 -> "今天是星期四,发布版本到凌晨"
        5 -> "今天是星期五,淡定喝茶,一个Bug改一天"
        6 -> "今天是星期六,稍微加加班"
        7 -> "今天是星期七,看剧中,游玩中"
        //else -> "养猪去了,忽略星期几"   这样返回值一定是String类型,因为全为Sting类型
        else -> {
            println("养猪去了,忽略星期几")   //这样写类型是Any == Object(相当于Java中的Object)
        }
    }
    println(info) //void  关键字 无返回    用Unit类代替了java的void关键字
}

15、Kotlin语言的String模板

在这里插入图片描述

// TODO 15、Kotlin语言的String模板
fun main() {
    val garden = "黄河公园"
    val time = 6

    println("今天天气很晴朗,去${garden}玩,玩了$time 小时")  // 字符串模板的写法
    //Java的写法(对比)  println("今天天气很晴朗,去"+ garden +"玩,玩了"+ time +"小时")

    //KT的if是表达式,所以更灵活。 Java的if是语句,还有局限性
    val isLogin = true
    println("server response result: ${if (isLogin)"恭喜你,登录成功√" else "不恭喜,你登录失败了,请检查Request信息"}")
}

16、Kotlin语言的函数头学习

在这里插入图片描述

//TODO 16、Kotlin语言的函数头学习
fun main() {
    method01(99,"lisi")

}

// 函数默认都是public
// 其实Kotlin的函数,更规范,先有输入,再有输出
private fun method01(age: Int, name: String):Int{
    println("你的姓名是:$name,你的年龄是:$age")
    return 200
}
/* 上面的Kt函数,背后会变成下面的Java代码:
    public static final int method01(int age, String name){
    String var2 = "你的名字是:"+ name + ",你的年龄是:" + age;
    System.out.print(var2);
    return 200;
}
*/

/*
 private static final int method01(int age, String name) {
      String var2 = "你的姓名是:" + name + ",你的年龄是:" + age;
      boolean var3 = false;
      System.out.println(var2);
      return 200;
   }
}
*/

17、Kotlin中函数参数的默认参数

在这里插入图片描述

package com.derry.s1

// TODO 17、Kotlin中函数参数的默认参数
fun main() {
    action01("lisi",89)
    action02("wangwu")
    action03()
    action03("赵六",76)
}

private fun action01(name: String,age:Int) {
    println("我的姓名是:$name,我的年龄是$age")
}

private fun action02(name: String,age:Int = 77) {
    println("我的姓名是:$name,我的年龄是$age")
}

private fun action03(name: String = "王五",age:Int = 77) {
    println("我的姓名是:$name,我的年龄是$age")
}

18、Kotlin语言的具名函数参数

在这里插入图片描述

package com.derry.s1

//TODO 18、Kotlin语言的具名函数参数
fun main() {
    loginAction(age = 99,userpwd = "123",usernam = "de",username = "Darry",phonenumber = "123456")
}

private fun loginAction(username: String,userpwd:String,phonenumber:String,age:Int,usernam:String){
    println("username:$username, userpwd:$userpwd, phonenumber:$phonenumber, age:$age")
}

19、Kotlin语言的Unit函数特点

在这里插入图片描述

// TODO 19、Kotlin语言的Unit函数特点
fun main() {

}
// : Unit不写,默认也有。Unit代表 无参数返回的 忽略类型 == Unit 类型类
// 相当于Java语言的void关键字(但不是,是一个类)
// (void是一个无参数返回的 忽略类型 但是它是关键字,不是类型,这很矛盾)
private fun doWork(): Unit{
    return println()
}
private fun doWork2(){
    return println()
}
private fun doWork3()/*: Unit*/{
    println()
}

20、Kotlin语的Nothing类型特点

在这里插入图片描述

// TODO 20、Kotlin语的Nothing类型特点
fun main() {
    show(60)

}

private fun show(number: Int){
    when(number){
        -1 -> TODO("没有这种分数")
        in 0..59 -> println("分数不及格")
        in 60..70 -> println("分数及格")
        in 71..100 -> println("分数优秀")
    }
}
interface  A{
    fun show()
}
class AImpl :A{
    override fun show() {
        // 下面这句话,不是注释提示,会终止程序的
        TODO("Not yet implemented")
    }
}

21、Kotlin语言的反引号中函数名特点

在这里插入图片描述

// TODO 21、Kotlin语言的反引号中函数名特点
fun main() {
    // 第一种情况
    `登录功能 2021年8月8日测试环境下 测试登录功能 需求编码人员Derry`("Derry","123456")

    // 第二种情况: // in is 在Kotlin里面是关键字,怎么办? 使用反引号
    KtBase_21.`is`()
    KtBase_21.`in`()

    // 第三种情况,很少发生
}
private fun  `登录功能 2021年8月8日测试环境下 测试登录功能 需求编码人员Derry`(name : String ,pwd: String){
    println("模拟登录$name, 密码:$pwd")
}

private fun `65465655475`(){
    // 写了很复杂的功能,核心功能
    // ...
}

// 公司加密私有的文档 65465655475 == 此函数的作用 xxxx
// 公司加密私有的文档 55576575757 == 此函数的作用 xxxx
public class KtBase_21 {

    // in is 在java里面是普通函数

    public static  final void in() {
        System.out.println("In run success");
    }

    public static  final void is() {
        System.out.println("In run success");
    }
}

22、对前面所学内容,小结篇

(变量&语句&函数)快速回顾小结

建议:配合视频将代码在理解的基础上自己写一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值