Kotlin快速入门

2023-11-12

kotlin

kotlin 完全兼容 java,可以和java互相调用,2017年谷歌正式将其作为android开发的第一语言。kotlin编译后产生与java编译后相同的class字节码文件。

基础语法

第一个代码 hello world
fun main(){
	print("hello world")
}

可以看出kotlin与java的区别,结尾不需要;

定义变量

kotlin 定义变量 使用val,var。val 可以看做java中的final不可修改。
kotlin与其他高级语言一样,可以类型推导。

val i : Int = 10 
var a = 10
val b = 10
a = a * 10
b = b * 10 //此行会报错,val cannot be reassingned ,会建议修改为var
print("a=$a")//打印变量不用再像java一样拼接了,直接使用$后接变量即可
for循环
kotlin中舍弃了for-i的操作,采用for-in
//0..10 数学中表示为[0,10]
for( a in 0..10){
	print(a)
}
//打印结果为:012345678910

until ,数学中为[0,10)

for( a in 0 until 10){
	print(a)
}
打印结果为:0123456789

downto ,降序 数学中为[10,0]

for(a in 10 downTo 0){
	prtin(a)
}
打印结果为:109876543210

step 步长

for(a in 0 until 10 step 2){
	print(a)
}
打印结果:02468

for ( i in 10 downTo  0 step 2){
     print(i)
}
打印结果为:1086420
方法

kotlin中方法的结构如下

fun 方法名(参数:类型):返回值{
}

//取得a+b的返回值
fun add(a:Int, b:Int):Int{
 	return a+b
}
val c = add(1,2)
print("c=$c")
打印结果:c=3
条件语句 (if,when)
if语句

基本与java保持一致,例如输入分数,显示等级

fun level(score:Int): String{
    if (score >= 90){
        return "优秀"
    }else if (score >= 70 && score < 90){
        return "良好"
    }else if (score >= 60 && score < 70){
        return "及格"
    }else{
        return "不及格"
    }
}
print(level(80))
打印结果为:良好

然后根据kotlin可以简化一下代码:

fun level2(score:Int): String{
    return if (score >= 90){
        "优秀"
    }else if (score >= 70 && score < 90){
        "良好"
    }else if (score >= 60 && score < 70){
        "及格"
    }else{
        "不及格"
    }
}

kotlin自动推到返回值的属性,在进一步进行简化:

fun level3(score:Int)=
    if (score >= 90){
        "优秀"
    }else if (score >= 70 && score < 90){
        "良好"
    }else if (score >= 60 && score < 70){
        "及格"
    }else{
        "不及格"
    }
when

有些类似java中的switch,继续使用上面分数的例子

when的匹配规则匹配条件->{对应逻辑} 花括号中有且仅有一行的时候可以省略

fun level4(score:Int): String {
    return when (score) {
        in 90..100 -> "优秀"
        in 70 until 90 -> "良好"
        in 60 until 70 -> "及格"
        else -> "不及格"
    }
}

同样省略类型推导,最终可以写成下面这样

fun level5(score:Int) =
     when (score) {
        in 90..100 -> "优秀"
        in 70 until 90 -> "良好"
        in 60 until 70 -> "及格"
        else -> "不及格"
    }

此时when直接返回了一个string字符串,不考虑到复用情况,可以直接使用变量来接收了。

val score = 100
val a = when (score) {
    in 90..100 -> "优秀"
    in 70 until 90 -> "良好"
    in 60 until 70 -> "及格"
    else -> "不及格"
}
print(a)
打印结果:优秀
集合
list(listof,mutableListOf)
listof

kotlin中创建一个list,使用listof函数(此集合为不可变):

fun list(){
    val list = listOf("a","b","c",2)
    //遍历打印list
    for ( i in list){
        println("i="+i)
    }
}

也可以指定list的泛型:
val list :List= listOf(“a”,“b”,“c”,2)
此时,list中仅可以存string类型,2为int类型,就会报错了。

mutableListOf

可变长的list,其余方法与listof没区别。

val list = mutableListOf<String>("a","b","c")
list.add("d")//listof是没有add方法的
set(setof,mutablesetof)

与list基本一致,只是set存储的数据不能是重复的,可以用来去重。

map(mapof, mutablemapof)
mapof

kotlin中map的使用:

fun map (){
    val map = mapOf("key1" to "values1","key2" to "values2","key3" to 3)
    for ( (key,values) in map){
        println(key+"-"+values)
    }
}
mutablemapof

使用方式与mapof一致,mutablemap是可变长的map,使用map[“key”]=values添加数据。

fun map (){
    val map = mutableMapOf<String,String>("key1" to "values1","key2" to "values2","key3" to "3")
    map["key4"]="4"
    for ( (key,values) in map){
        println(key+"-"+values)
    }
}

与java中相同,都是使用class关键字表示类

class Animal{
    var eat = ""
    var sleep = 0
    var play = ""

    fun action(){
        print("爱吃${eat},每天睡${sleep}小时,玩${play}")
    }
}
调用:
val animal = Animal()
animal.eat = "肉"
animal.play = "球"
animal.sleep = 12
animal.action()
打印结果:爱吃肉,每天睡12小时,玩球
继承

kotlin默认的类是不能继承的,默认类相当于java中的final。如果想要继承一个类,需要添加open关键字。

open class Animal{
    var eat =""
    var sleep =0
    var play =""

    fun action(){
        print("爱吃${eat},每天睡${sleep}小时,玩${play}")
    }
}

class Dog : Animal() {
	var name = “”
}
//也可以将参数写到主构造函数中,主构造没有函数体,如果有需要可以写在init{}中
class Dog(val name :String) : Animal() {
}
val dog = Dog("小a")

上述代码中Animal类在被Dog类继承的时候,有一个(),这表示的是Dog类继承Animal的无参构造函数。如果将Animal内的参数放入主构造函数中,那么完整代码如下:

open class Animal(val eat:String,val sleep:Int,val play:String){

    fun action(){
        print("爱吃${eat},每天睡${sleep}小时,玩${play}")
    }
}
class Dog(val name :String,eat:String,sleep:Int,play:String) : Animal(eat,sleep,play) {

}
val dog = Dog("小a",eat = "骨头",16,"毛线")

次构造函数:constructor
Kotlin中规定,次构造函数必须调用主构造函数。次构造函数有函数体,使用关键字constructor修饰。给上面的Dog类添加次构造函数:

class Dog(val name :String,eat:String,sleep:Int,play:String) : Animal(eat,sleep,play) {
    
    constructor(eat:String,sleep:Int,play:String) : this("",eat,sleep,play)
}
val dog2 = Dog(eat = "肉",10,"飞盘")
dog2.action()
打印结果:爱吃肉,每天睡10小时,玩飞盘

当类中没有主构造函数,只有次构造函数的时候,使用super关键字

class Dog1 : Animal {

    constructor(eat:String,sleep:Int,play:String) : super(eat,sleep,play)
}
接口

与java相同,使用interface关键字

//定义接口aaa,类b实现aaa接口
interface aaa{
    fun a()

}
class b:aaa{
    override fun a() {
        TODO("Not yet implemented")
    }
}
数据类(data)

直接使用data关键字,可以省略toString,hashcode,equals等方法的重写

data class Cat(val eat:String)
val cat = Cat("fish")
print(cat)
打印结果为:Cat(eat=fish)
单例模式(object)

kotlin中单例模式的实现十分简单,只需要将class 替换为object即可。

object Singleton{
}

上述就是单例模式的写法,我们可以在其中添加函数。

object Singleton{
    fun instans(){
        print("this is singleton!!!")
    }
}
//调用
Singleton.instans()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin快速入门 的相关文章

随机推荐

  • Pycharm破解方法

    3 破解补丁激活 优点 到期时间为2099年 基本为永久啦 缺点 相对服务器激活麻烦些 但是一共只需要3个步骤 其实并不麻烦 下载 https pan baidu com s 1mcQM8CLUnweY02ahKEr4PQ 并将 Jetbr
  • win7设置右键+T 快捷键 快速新建文本文档

    1 win r 组合键呼出 运行 win就是键盘上和桌面 开始 有相同图标的按键 田 字 2 输入regedit 回车 出现 注册表编辑器 窗口 3 窗口下寻找这个位置 HKEY CLASSES ROOT Local Settings Mu
  • 【pygame学习_5】窗口设计

    1 引言 窗体是游戏的交互界面 一般我们会遇到窗口大小可调 窗口无边框 全屏显示 最小化设计 改名字 换图标等设计需求 屏幕绘制有如下重要函数 2 屏幕模式函数 pygame display set mode print pygame di
  • java解析蓝奏云直连(解析真正文件地址)

    使用htmlunit解析蓝奏云直连 前言 最近有个需求 客户端需要更新软件版本 我一直在用蓝奏云 觉得是个非常不错的网盘 可是如果用户自己打开连接选择下载方式很麻烦 用过蓝奏的朋友都知道 打开外链还要选择普通下载 电信下载 联通下载 很麻烦
  • 多系统UEFI启动项清理,windows、ubuntu,win10盘符隐藏

    文章目录 step1 推荐方法 step2 在window系统中启动cmd窗口 win10 隐藏不必要的盘符 如单机多系统情形 step1 推荐方法 参考 https blog csdn net mtllyb article details
  • sap服务器数据库配置文件,安装和配置 SAP 和数据库

    安装和配置 SAP 和数据库 使用本节中的过程可以执行以下任务 安装 SAP 和数据库 安装 SAP 和可缩放的应用程序服务器 使 SAP 能够在群集中运行 检验 SAP 和数据库安装是否适合于中央实例 检验 SAP 和数据库安装是否适合于
  • R语言排序函数sort(),rank(),order()

    转载地址 http blog sina com cn s blog 6caea8bf0100spe9 html 在R中 和排序相关的函数主要有三个 sort rank order sort x 是对向量x进行排序 返回值排序后的数值向量 r
  • c++智能指针

    C 智能指针详解 本文系转载 原文出处 诚然原博主总结的非常好 我只是加一些自己觉得需要补充的地方 并且在最后给出目前c 11在智能指针这方面的弥补 一 简介 由于 C 语言没有自动内存回收机制 程序员每次 new 出来的内存都要手动 de
  • 分布式系统实现幂等性的方式

    幂等性 接口的幂等性就是同样的数据 在实现方法的多次调用 得到的结果一致 对于查询接口 天然的保持幂等性 但是对于cud来说 如何保持幂等性 看法 从以下方式来看 要保证幂等性 必须要有一个标识 至始至终的保持不变的标识 只有这样 后来的操
  • 开源点云数据集整理汇总

    目录 一 ModelNet40 1 网址 2 模型 二 ShapeNet 1 网址 2 模型 三 S3DIS Dataset 1 网址 2 模型 四 ScanNet 1 网址 2 模型 五 RGB D Object Dataset 1 网址
  • 麻雀算法极限学习机SSA-ELM回归预测及其MATLAB代码实现

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 信号处理 图像
  • 哈希 学习笔记

    Tips Hash 哈希 散列 Tips 哈希经常与哈希函数指一个意思 本文中哈希与哈希函数不做特殊区分 默认就是一个意思 什么是哈希 在记录的关键字与记录的存储地址之间建立的一种对应关系叫哈希函数 哈希函数就是一种映射 是从关键字到存储地
  • AI笔记(1)

    回归与分类 回归 在数学表示 数值是一个连续性的 要预测的一个值 回归分析是一种预测性的建模技术 它研究的是因变量和自变量之家的关系 这种技术通常用于预测分析 通过使用直线或曲线来拟合数据点 目标是使曲线到数据点的距离差异最小 分类 分类模
  • python重新加载某方法

    20221014 引言 我记得 在很久之前我就弄过这部分内容 当时也是在jupyter notebook中进行实验 然后在这个过程中 需要重新加载某个方法 因为在实验过程中 修改了这个py文件中的函数 整体的思路就是这样 这次也是遇到了这个
  • nginx+ftp实现图片的上传与访问

    1 Nginx的安装 在前面的博客讲到 具体见下面的网址 Nginx的安装 http blog csdn net zbw18297786698 article details 52556293 2 Linux安装ftp组件 2 1 安装vs
  • 随e行创建L2TP 809 错误【一键脚本】

    请下载下面的文件 809 repair zip 右键点击 809 repaire bat 文件 以管理员身份运行 选择 是 根据提示 输入对应字符 yes 以完成对注册表的修改 等待脚本完成对注册表和服务的更改 按任意键退出窗口 809错误
  • LeetCode 热题 HOT 100:链表专题

    LeetCode 热题 HOT 100 https leetcode cn problem list 2cktkvj 文章目录 2 两数相加 19 删除链表的倒数第 N 个结点 21 合并两个有序链表 23 合并 K 个升序链表 141 环
  • windows服务器修改SSL证书友好名称

    系统环境 操作系统 windows 2016 web服务器 IIS 10 修改原因 阿里云上创建的免费证书 友好名称均为alias 在一些集成环境中操作绑定对应站点的SSL证书的时候 可能会因为证书友好名称相同 而找不到对应的SSL证书 操
  • UNIAPP保存base64图片

    制作APP分享二维码 后端生成base64图片 需要前端保存到相册 上代码 saveImgFile base64 base64为base64图片值 const bitmap new plus nativeObj Bitmap test bi
  • Kotlin快速入门

    kotlin kotlin 完全兼容 java 可以和java互相调用 2017年谷歌正式将其作为android开发的第一语言 kotlin编译后产生与java编译后相同的class字节码文件 基础语法 第一个代码 hello world