Kotlin语法基础

文章目录

  • Kotlin语法基础
    • 变量
    • NULL检查机制
    • 对象数据类型
      • 类型转换
    • 字符和字符串
      • 区间
    • 函数
      • lambda(匿名函数)
    • 程序逻辑控制
      • if条件判断
      • when条件语句
      • 循环语句
    • 面向对象编程
      • 类与对象
      • 继承与构造函数
    • 接口
    • Kotlin函数可见性修饰符

前言 : Java语言与Kotlin语言有相似之处, 但也有很多不同之前, 本文主要关于Kotlin一些基础语法进行展开, 有Java经验的小伙伴可以看看有哪些不同之处.

以下面这个代码为例:

package com.example.mykotlincodeclass Hello(val name:String) {fun halo(){println("Hello, $name")}
}fun main(args:Array<String>){Hello("World").halo()//println()
}

  • 可以看出Kotlin 文件以 .kt 为后缀

  • 代码文件的开头一般为包(package)的声明

  • 导入包的关键字import

  • Kotlin每一行代码的结尾是不用加分号的,当然你加分号也不会报错, 但那是 Java 的写法,Kotlin的代码不需要分号

  • 代码注释

    • // 单行注释/*块注释
      */
      

变量

Kotlin中定义一个变量,只允许在变量前声明两种关键字:valvar,两种变量都可以没有初始化值,但在引用前必须赋初值

  • val (全称value) : 用来声明一个不可变的变量,即一旦赋初始值就不可再二次赋值

  • var (全称variable) : 用来声明一个可变的变量, 即可多次进行赋值

  • 变量的类型声明放在变量名后, 比如声明一个整型变量 : var a:Int =1

fun main(){val num1:Int = 1var num2:Int = 2var sum:Int = num1 + num2println("总和为$sum")
}

永远优先使用val来声明一个变量,而当val没有办法满足你的需求时再改为使用var。这也是为了安全性, 避免了不经意间修改了某个变量的值, 导致未知的安全隐患。

NULL检查机制

Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理

  • 字段后加!! : 抛出空异常
  • 字段后加? : 返回值为null

对象数据类型

Kotlin相比Java来说, 抛弃了基本的数据类型,全部使用对象数据类型, 即数据类型的首字母要大写。Kotlin 中没有基础数据类型,只有封装的数字类型,每定义的一个变量,其实 Kotlin 帮你封装了一个对象,这样可以保证不会出现空指针。

对象数据类型 说明 位宽度
Int 整型 32bit
Long 长整型 64bit
Short 短整型 16bit
Float 单精度浮点型 32bit
Double 双精度浮点型 64bit
Boolean 布尔型
Char 字符型 16bit
Byte 字节型 8bit
String 字符串类型
  • Kotlin中===表示比较对象的地址, ==表示比较两个值的大小是否相等

    val a:Int = 333
    val c1:Int? = a
    val c2:Int? = a
    println(c1===c2) //对象不同
    println(c1==c2) //值相同
    

类型转换

由于不同的表示方式,较小的数据类型并不是较大数据类型的子类型,较小的数据类型不能隐式转换为较大的数据类型。 这意味着在不进行显式转换的情况下我们不能把 Byte 型值赋给一个 Int 变量

  • toByte() : 转换为Byte类型
  • toShort(): 转换为Short类型
  • toInt() : 转换为Int类型
  • toLong() :转换为Long类型
  • toFloat() : 转换为Float类型
  • toDouble() : 转换为Double类型
  • toChar() : 转换为Char类型
  • toString(): 转换为字符串
val b:Byte= 1
//val n:Int = b //错误的做法
val n:Int = b.toInt()
val c = b.toString()

字符和字符串

  • 字符 (Char): 单个字符组成, 字符用单引号'引起来

    • 比如: ‘a’, ‘1’ 等
    • Kotlin中的字符(Char)不能直接和数字进行操作,
  • 字符串(String): 由单个或多个字符组成,字符串用双引号"引起来

    • 比如 : “hello world”,“H” 等

    • Kotlin 支持三个引号 """ 扩起来的字符串,支持多行字符串

    • 和 Java 一样,String 是不可变的。方括号 [] 语法可以很方便的获取字符串中的某个字符,也可以通过 for 循环来遍历

    • 字符串内嵌表达式 : ${},其中花括号内可以放变量或者变量方法的返回值, 它可以直接放在字符串里面, 将变量的值输出;只有一个变量名或者变量值时可以省略{}

    • Kotlin支持用+来做字符串的拼接(但不建议

      val a = 1;
      val b = "变量a的值为$a"
      println("输出变量a:"+a)  //使用字符串拼接,Kotlin不建议使用这种方式, 更建议使用字符串内嵌表达式
      println("输出变量a:$a")  //单个变量可以省略{}
      //println("输出变量a:${a}") //也可以不省略{}
      println("输出字符串b:${b.replace('为','是')}")
      val s = """${'$'}1.00 """.trimIndent() //trimIndent()方法删除多余的空行或缩进
      val ss = """${'$'}1.00 """
      println(s)
      println(ss)
      

${}也可以用来转义字符

区间

  • .. 区间的操作符

  • 搭配in 在这区间范围和!in不在区间范围

  • for (i in 1..9) {print(i) //从1到9这个区间输出,输出123456789, 即[1,9]
    }
    println()for (i in 1..9 step 3) {print(i) //步长为3, 即增长值为3, 输出147
    }
    println()for (i in 9 downTo 1 step 3) {print(i)  //输出963
    }
    println()
    for (i in 1 until 9) {print(i) //输出12345678 , 即[1,9)
    }
    

    输出:

    123456789
    147
    963
    12345678
    

函数

  • 定义函数的关键字fun【function的简称】:主要用来声明函数定义

  • 有返回值: fun <函数名>(<参数1,参数2,...,参数n>):<返回值类型>{}

    • fun sum(a: Int, b: Int): Int {return a + b
      }
      //或者
      public fun sum(a: Int, b: Int): Int = a + b
      // = 相当于return
      
  • 无返回值 : fun <函数名>(<参数1,参数2,...,参数n>):Unit{}

    • fun sum(a: Int, b: Int): Unit {val sum = a+b
      }
      //或者可以省略Unit
      fun sum(a: Int, b: Int) {val sum = a+b
      }
  • 可变长参数函数: 函数的变长参数可以用 vararg 关键字进行标识

    • fun vars(vararg v:Int){ //即可以输入多个参数for(i in v){print(i)}
      }fun main() {vars(1,2,3,4,5)  // 输出12345
      }
      
    • 输出:

    • 12345
      
  • 当函数只有一行代码时,可以省略函数体, 使用=相当于返回值

    fun largerNumber(num1: Int, num2: Int) = if (num1 >num2) {num1} else {num2}
    

lambda(匿名函数)

  • lambda表达式 : 没有函数名, 通过变量来调用函数。

  • 语法结构 : {参数1:参数类型, 参数2:参数类型 -> 函数体}

    fun main() {val add = {m:Int,n:Int -> m+n}print(add(1,2))
    }
    

    或者

    fun main(){val add:(Int,Int)->Int ={m,n->m+n}println(add(1,2))
    }
    

程序逻辑控制

if条件判断

  • 判断语句 if

    // if..... else.....
    if (条件判断) {执行语句
    }else{执行语句
    }// if ..... else if .....  else ......
    if (条件判断) {执行语句
    }else if(条件判断){执行语句
    }else{执行语句
    }
    
  • if语句是可以有返回值的, 即if语句每个条件后面的就是返回值

    val value = if (num1>num2){num1}else{num2}
    

when条件语句

类似于java中的switch语句

匹配值 -> {执行逻辑}
  • 执行逻辑只有一行代码时,{ }可以省略
fun namenum(name:String):Int{val a = when(name){"张三" -> 100"李四" -> 101"王五" -> 102else -> 0}return a
}

还可以这样写

fun namenum(name:String):Int{val a = when{name =="张三" -> 100name =="李四" -> 101name =="王五" -> 102else -> 0}return a
}
  • is 关键字, 使用类型匹配

    when(num){is Int -> print("this is Int")is Double -> print("this is Double")else -> print("number is not support")
    }
    

循环语句

  • while

  • for

  • for - in : 循环遍历区间

    • 区间: 和数学中的区间概念一样, 都是表示一个范围

      • ..创建闭区间, 比如:[0,10]表示为 0..10
      • until创建左闭右开区间, 比如: [0,10)表示为0 until 10
      • downTo创建降序区间, 比如:[10,0] 表示为10 downTo 0
    • 步长 :step, step 1相当于递增1; 类似于i=i+1

    • 举栗子 :

      fun main() {//     ..for (i in 0..10 ){print("$i ")}println()
      //    untilfor (i in 0 until 10){print("$i ")}println()
      //    downTofor (i in 10 downTo 0){print("$i ")}println()
      //    stepfor (i in 0..10 step 3){print("$i ")}
      }
      

      输出结果:

      0 1 2 3 4 5 6 7 8 9 10
      0 1 2 3 4 5 6 7 8 9
      10 9 8 7 6 5 4 3 2 1 0
      0 3 6 9
      

面向对象编程

Kotlin是支持面向对象编程,面向对象的基本思想就是对类进行封装,再通过实例化类来创建对象, 调用对象的字段和函数(方法)来满足实际编程的需求。

类与对象

  • 类是对事物的一种封装, 字段表示类拥有的属性

  • 关键字 class, 用于创建一个类

    //创建一个类
    class Tool {var name:String = ""var application :String = ""fun use(){print("该工具的名称为$name, 用途为$application")}
    }fun main() {//    实例化一个类val computer = Tool()computer.name = "电脑"computer.application = "办公"computer.use()
    }
    

继承与构造函数

  • 在子类的基础上继承父类的资源

  • Kotlin中规定任何一个非抽象类默认是不可以被继承的

    • 因为类和变量一样, 最安全的情况下是不可变的, 为了防止未知的风险而设计的
    • 要想类被继承就需要在类的前面加open关键字, 这也表明了你是知道这个类是为继承而设计的, 这样就将未知的风险变为已知的风险
  • 子类继承父类的写法是加: 冒号

    open class Parent{......
    }class Son:Parent(){......
    }
    
  • 构造函数

    • 主构造函数 :每个类默认都有一个不带参数的主构造函数, 特点是没有函数体, 直接定义在类名后面, 主构造函数主要是继承类的类名名后的括号
    • 次构造函数 :次构造函数是通过constructor关键字来定义的
open class Person(val name: String, val age: Int) {...
}class Student(val sno: String, val grade: Int, name: String, age: Int) :Person(name, age) {...
} //Person()就是默认带主构造函数class Student(val sno: String, val grade: Int, name: String, age: Int) :Person(name, age) {constructor(name: String, age: Int) : this("", 0, name, age) {}  //次构造函数, this是调用主构造函数constructor() : this("", 0) {} //次构造函数, this是调用次构造函数, 间接调用主构造函数
}val student1 = Student()
val student2 = Student("Jack", 19)
val student3 = Student("a123", 5, "Jack", 19)

Kotlin规定,当一个类既有主构造函数又有次构造函数时,所有的次构造函数都必须调用主构造函数(包括间接调用), 次构造函数用的比较少

接口

  • 接口是实现多态编程的一部分
  • Kotlin语言是单继承结构语言, 任何一个类只能最多继承几个父类, 但可以实现多个接口
  • 接口关键字interface
  • kotlin允许对接口中定义的函数进行默认实现
interface Work {fun coding()fun check()fun doing(){println("上班打卡")}
}class Worker(val name:String,val num:Number) :Work{  //继承接口override fun coding() {  //实现coding函数println("${name}在写代码")}override fun check() {  //实现check函数print("检查${num}号码是否正确")}
}fun main() {val a = Worker("张三", 12345)a.coding()a.doing()
}

Kotlin函数可见性修饰符

  • public : 所有类可见(默认)
  • private : 当前类可见
  • protected : 当前类,子类可见
  • internal : 同一模块中的类可见

参考资料 : 第一行代码——Android(第3版)
菜鸟教程

【Android学习之路】Kotlin语言基础相关推荐

  1. 【Android学习之路】新手入门Kotlin语言

    入门Kotlin编程语言 Kotlin简介 Kotlin是一种在Java虚拟机上运行的静态类编程语言, 有Android世界的Swift之称,是由JetBrains公司设计开发并且开源的编程语言.早在 ...

  2. 我的全栈之路-C语言基础之C语言概述与开发环境搭建

    我的全栈之路-C语言基础之C语言概述与开发环境搭建 我的全栈之路 1.1 信息技术发展趋势 1.2 浅谈计算机系统架构 1.2.1 计算机系统架构概述 1.2.2 计算机硬件系统 1.2.2 计算机软 ...

  3. 【译】将 Android 项目迁移到 Kotlin 语言

    本文讲的是[译]将 Android 项目迁移到 Kotlin 语言, 原文地址:Migrating an Android project to Kotlin 原文作者:Ben Weiss 译文出自:掘 ...

  4. java学习之路之javaSE基础1

    <h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解) * A:什么是计算机?计算机在生活中的应 ...

  5. 第3章 Kotlin语言基础 《Kotlin 极简教程》

    2019独角兽企业重金招聘Python工程师标准>>> 第3章 Kotlin语言基础 掌握基础,持续练习 学习任何东西,都是一个由表及里的过程.学习一门编程语言也一样.对于一门编程语 ...

  6. 我的全栈之路-C语言基础之数据存储

    我的全栈之路-C语言基础之数据存储 我的全栈之路 2.1 计算机的计算单位 2.1.1 容量单位 2.1.2 速度单位 2.2 计算机底层为什么只能识别二进制 2.3 进制 2.3.1 进制概述 2. ...

  7. Spark学习之路一——Spark基础及环境搭建

    Spark学习之路一--Spark基础及环境搭建 文章目录 一. Spark 概述 1.1 概述 1.2 优势特性 1.2.1 运行速度快 1.2.2 容易使用 1.2.3 通用性 1.2.4 运行模 ...

  8. 学习之路-现代密码学基础-001

    学习之路-现代密码学基础-第一章密码学概论 转载于:https://www.cnblogs.com/vegetables-Adanos/p/5371420.html

  9. 四、Android学习第四天——JAVA基础回顾(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天--JAVA基础回顾 这才学习Android的 ...

  10. android学习之路1:前车之鉴之开发环境搭建

    写程序两年有余了,朝九晚五的拼命工作着,却忘记了我们自己最初的梦想,忘却了最开始站在起跑线时的英姿勃发,渐渐的变成了coder,继续coding中. Android学习之路刚刚开始,目前大米属于小白阶 ...

最新文章

  1. NOIP2017 小凯的疑惑
  2. PTA基础编程题目集-6-5 求自定类型元素的最大值
  3. RocketMQ错误消息重试策略之Consumer的重试机制(Exception情况)
  4. 『设计模式』大话西游的移魂大法竟移出来了桥接模式
  5. java set contains用法,Java TreeSet contains()用法及代码示例
  6. Webapi管理和性能测试工具WebBenchmark
  7. hbase/thrift/go连接失败
  8. django类视图简单使用和源码解析
  9. 跟着alex学习了格式化输出,最大的感受就是编程这个事,一定要自己动手去做,才能学会。看会和自己会做完全是两码事...
  10. swiper 上滑触发_新知 | 为何红酒杯壁挂“眼泪”,骑自行车不会倒,冰面那么滑?...
  11. Azure: 给 ubuntu 虚机挂载数据盘
  12. 蓝桥杯2015年第六届C/C++B组国赛第一题-积分之迷
  13. 计算机四个发展应用范围,计算机的四个发展阶段
  14. 永久禁用software reporter 进程,占用高解决方法。【永久禁用software_reporter_tool.exe程序】
  15. 在线qq的html代码,网页QQ
  16. python 实现简单画板_python 画板示例源码(可做签名/涂鸦)
  17. PS常用案例步骤详解,自学 Photoshop 2022 Mac版——笔记 3实战PS做练习题
  18. 即刻App产品分析报告
  19. C语言源代码系列-管理系统之电子英汉词典
  20. C++实现愤怒小鸟小游戏

热门文章

  1. 2021年中国高校计算机大赛团体程序设计天梯赛
  2. 你踩过社群运营的坑吗?
  3. laravel 报错 No query results for model
  4. 用android studio实现倒计时,AndroidStudio项目制作倒计时模块
  5. Mac使用教程 - 访达/Finder实用技巧
  6. 通过手机访问电脑上Apache的端口
  7. Spark内存管理-UnifiedMemoryManager和StaticMemoryManager
  8. 推动行业数字化转型,亚马逊云科技自身就是“好把式”
  9. 自动更新局域网系统补丁[来源网路]
  10. 《Go语言圣经练习题》