day01【Kotlin基础】从零开始,最美的梦想一定最疯狂

本文介绍Kotlin编程语言的基础知识,涵盖Kotlin的数据类型、变量声明、字符串操作、元组使用及空值处理等内容,并对比了Kotlin与Java的差异。

day01【Kotlin】

前言

0.什么是Kotlin?

中文:靠他灵

Jetbrains发布基于JVM的编程语言

groovy scalaJetbrains是做编译器起家的公司,总部捷克,有圣彼得堡和美国分部

Jetbrains https://www.jetbrains.com/

kotlin之父: Andrey Breslav

1533472467865

1.为什么使用Kotlin?

1.简洁(数据类 扩展方法 区间)

2.空值安全(针对空值处理的运算符)

3.百分百兼容 java scala

4.函数式编程 JDK1.8 lambda 表达式

5.协成(thread)

6.DSL(领域特定语言)

2.kotlin的前景?

1.kotlin script(gradle groovy).kts

2.Java虚拟机应用

Web kotlinee

Javafx JDK1.8之后

3.前端开发 Kontlinjs html+css+js

4.Android开发

5.支持开发 ios oc swift

6.Kotlin Native 程序(完全抛弃JVM虚拟机) 全栈工程师

3.kotlin的格式:

fun main(args: Array<String>) {
    println("hello world")
}

4.kotlin 基本数据类型

数据类型占用字节取值范围
Boolean1bytetrue或false
Byte1byte=8bit-128~127
Char2byte
Short2byte=16bit-32768~32767
Int4byte-2147483648~2147483647
Float4byte精确到小数点后6位
Long8byte9223372036854775807~9223372036854775807
Double8byte精确到小数点后15到16位
a.基本数据类型书写格式:
var byte:Byte = 10
var short:Short = 20
var int:Int = 30;
var char:Char = 'H'
var float:Float = 1.2345f
var double:Double = 1.23456
var long:Long = 200
var b:Boolean= true
b.kotlin 和 Java 基本数据类型的区别

kotlin只有基本数据类型 没有包装数据类型

kotlin 基本数据类型相当于具备了java的基本数据类型和包装数据类型

会更具不同的使用场景选择使用基本数据类型还是包装数据类型

c.Kotlin 与 Java 虚拟机

java虚拟机的最大特点 : 跨平台

如何把Kotlin转化为Java文件:

首先把Kotlin 编译成.class文件,重新转化为Java文件

Iools->kotlin->Show Kotlin Bytecode

d.智能类型推断和类型转化

kotlin对于数据类型的转化比较严格,不同的数据类型之间不能转化,需要通过to数据类型方法实现转化.

格式:

var m =10 // int类型

var n  =20L // long类型

m = m.toLong   把int类型转化为long类型

n = n.toInt    把long类型转化为int类型

5.Var 和 Val的区别

a.var 对应的就是Java的普通变量
b.val 对应的就是 Java的final变量
c.final 编译器常亮
d.val 运行时的
变量可变:var

var a =20

a=30

a=50

变量不可变:val

val a = 20

a =30  //报错

ps: 在我们项目开发中,能够使用val的话尽量使用val,实在不行的话再使用var

6.Kotlin 对于字符串的使用

/*---------------------------- 普通字符串 ----------------------------*/
fun main(args: Array<String>) {
//地址
val place = "广东省深圳市宝安区"
通过方法实现跨行答应
val place ="广东省\n深圳市\n宝安区
println(place)
}
打印结果: 广东省
         深圳市
         宝安区
kotlin字符串的原样输出字符串使用:
/*---------------------------- 原样输出字符串:自动帮我们加上一些特殊字符 -----------------------*/

val place = """           
   /中国
   /北京
   /长城
""".trimMargin("/")
println(place)

打印结果: 中国
         北京
         长城
kotlin字符串的删减使用:
fun main(args: Array<String>) {
    val s = "  张三  "
    println(s)  //张三
    /*---------------------------- 删除空格 ----------------------------*/
    println(s.trim())
    /*---------------------------- 原样输出字符串删除空格 ----------------------------*/
    val place = """
        /中国
        /北京
        /长城
    """.trimMargin("/")
    println(place) 

 打印结果:中国
         北京
         长城
kotlin字符串的比较使用:

/*---------------------------- 字符串比较 ----------------------------*/
val str1 = "hello"
val str2 = String(charArrayOf('h','e','l','l','o'))
println(str1)
println(str2)

//equals 比较的是值
println(str1.equals(str2))
//==和equals效果是一样的
println(str1==str2)
//=== 比较的是地址 相当于java的==
println(str1 === str2)
kotlin字符串的截取使用:

fun main(args: Array<String>) {
    val path = "/Users/yole/kotlin-book/chapter.adoc"
    /*---------------------------- 获取前6个字符 ----------------------------*/
    val result1 = path.substring(0,6)
    println(result1)

     /*---------------------------- 把第一个r之前的字符截取 ----------------------------*/

 先找第一个r角标
    val index = path.indexOf("r")
    val result2 = path.substring(0,index)
    println(result2)

kotlin方法:
    val result2 = path.substringBefore("r")
    println(result2)

    /*---------------------------- 把最后一个r之前的字符截取 ----------------------------*/
    val result3 = path.substringBeforeLast("r")
    println(result3)

    /*---------------------------- 把第一个r之后的字符截取 ----------------------------*/
    val result4 = path.substringAfter("r")
    println(result4)
    /*---------------------------- 把最后一个r之后的字符截取 ----------------------------*/
    val result5 = path.substringAfterLast("r")
    println(result5)
}

7.Kotlin 元组数据(特有)

二元组:Pair

三元组:Triple

fun main(args: Array<String>) {
    /*---------------------------- 二元元组 ----------------------------*/

   val pair = Pair<String,Int>("张三",20)
   val pair = "张三" to 20
   val name = pair.first
   val age = pair.second
   println(name)
   println(age)
/*---------------------------- 三元元组 ----------------------------*/
//Triple
//姓名  性别 年纪
val triple = Triple<String,String,Int>("李四","男",30)
val name = triple.first
val sex = triple.second
val age = triple.third
println(name)
println(sex)
println(age)

8.空值处理

        ?可空变量类型
val a:Int? = null
        !!非空断言
var age:String = null!!
        ?.空安全调用符
age?.toInt()
        ?:Elvis操作符(猫王)
var ageInt:Int = age?.toInt()?:10

9.打字交互

fun main(args: Array<String>) {
    /*---------------------------- 输出函数 ----------------------------*/
    val str = "hello"
    println(str)
    /*---------------------------- 输入函数 ----------------------------*/
    var a:Int = readLine()?.toInt()?:0
    var b:Int = readLine()?.toInt()?:0
    var result = a+b
    println(result)

 打印结果:
 10
 20
 30

10.kotlin函数

概述:main函数是kotlin程序的入口函数,他是计算机运行起来第一个默认找的第一个运行的函数.

函数包括输入函数与输出函数: (4类函数)

无参无返回值
fun myFun1() { println("myFun1")
}
无参有返回值
fun myFun2(): String {return "myFun2“
}
有参无返回值
fun myFun3(content: String) { println(content)
}
有参有返回值
fun myFun4(content: String): String { return content
}
a.顶层函数

概述:Java里面函数都需要依赖于对象存在不依赖于class类单独存在的函数

例如:

//顶层函数
fun main(args: Array<String>) {

}
//顶层函数
fun sayHello(){

}
b.嵌套函数

概述:函数里面定义的函数

例如:

//嵌套函数
fun main(args: Array<String>) {
    fun hehe(){
        println("hello")
    }

    hehe()
}
c.字符串模板练习
今天天气晴朗,万里无云,我们去中山公园游玩,首先映入眼帘的是,中山公园4个镏金大字。

今天天气晴朗,万里无云,我们去人民大会堂游玩,首先映入眼帘的是,人民大会堂5个镏金大字。

今天天气晴朗,万里无云,我们去金銮殿游玩,首先映入眼帘的是,金銮殿3个镏金大字。

今天天气晴朗,万里无云,我们去鸟巢游玩,首先映入眼帘的是,鸟巢2个镏金大字。

要求:通过规律定义模板

答 :

fun main(args: Array<String>) {
    println(createDiary("中山公园"))
}
//创建字符串模板
//字符串拼接
fun createDiary(place:String):String{
    return "今天天气晴朗,万里无云,我们去$place 游玩,首先映入眼帘的是,${place}${place.length} 个镏金大字。"
}

11.kotlin if语句的使用

a.普通的if语句
if(a>b){return a-b
}else{return b-a
}
b.去{}的if语句
去{}的if/else
   if(a>b)    return a-b  else return b-a
c.精简if/else语句
if(a>b) return a-b else return b-a
d.If返回值语句
return  if (a > b) a - b else b - a
下载代码方式:https://pan.quark.cn/s/e6c2e312b658 在苹果公司的Mac操作系统环境中,当用户尝试安装非原厂驱动程序时,可能会遭遇系统无法正常启动的困境。这种情况常常源于名为.kext的内核扩展驱动程序存在兼容性问题或安装过程中出现失误。这份指南介绍了一种无需重新安装操作系统且能够保护所有用户数据的修复方法,这一方案对于先前许多面临类似挑战的用户而言,曾是极为棘手的情况。文档中提及的“用户模式启动”实际是指单用户模式,这种启动方式仅加载核心系统功能,而忽略图形用户界面及常规应用程序的加载。在单用户模式下,用户能够访问命令行界面,进而执行一系列修复指令。解决此问题的首要环节是验证存储设备是否存在故障,因为这是导致系统无法启动的常见诱因。借助终端指令`/sbin/fsck -f`,可以诊断并纠正文件系统层面的错误。倘若系统在启动过程中检测到文件系统异常,通常会自动执行`fsck`命令,然而,如果系统卡在进度条100%无法继续,手动运行该命令则显得尤为必要。指令`mount -uw /`的功能是将根目录切换为可读写状态,由于系统默认是以只读模式启动的。这一操作的目的是为了在不重新进入正常模式的前提下,对系统进行必要的调整。随后,文档提供了一个关键操作:对存在问题的驱动程序文件进行修改或更名。在Mac系统中,第三方驱动程序一般安装在`/Library/Extensions/`目录下。每个驱动程序都包含一个以.kext为后缀名的文件夹,例如在此案例中的AX88772.kext。通过命令行将故障的.kext文件更名(例如改为.kext.bak),可以临时禁用该驱动程序。这一操作需在命令行环境中完成,首先使用`cd /Library/Exte...
源码链接: https://pan.quark.cn/s/a4b39357ea24 海康威视NVR76/78N系列是一款为中小型企业及家庭用户量身打造的网络视频录像机(Network Video Recorder),其核心用途在于对来自网络摄像头的视频流进行管理和存储。该系列具备兼容萤石云服务的功能,这使得用户能够通过网络远程进行监控系统的访问、监控以及管理,借助互联网达成随时随地进行视频查看和录像回放的目标。在标题中提及的"海康NVR76/78N系列升级包"具体指代适用于这一系列录像机的软件更新套装。此类升级通常涵盖性能改进、新增功能、安全漏洞修正以及兼容性增强等多个方面,旨在保障设备始终处于新状态,优化运行效能并改善用户使用感受。譬如,升级或许囊括了更为先进视频压缩技术的应用,用以降低网络带宽的消耗,或者为新型网络摄像头提供支持。产品说明中所列出的型号,如DS-7816N-SNH、DS-7816N-SHT、DS-7816N-SHT/N、DS-7816N-SHT/P,均属于海康威视NVR76/78N系列的特定版本。这些型号之间的不同之处可能体现在硬盘接口数量、视频通道数目、视频解码性能、网络接口规格以及是否集成内置电源等硬件参数。型号中的"DS-7816N"表明该设备能够同步处理16个视频通道,而后续的字母标识及后缀则可能象征着不同的功能或特性。"萤石云"是由海康威视开发的一套云服务解决方案,它提供了远程监控、即时视频浏览、录像保管和智能警报等多项服务。用户可借助萤石云App或网页版,便捷地监管和检视自身的监控装置,不受地理位置限制。相较于传统的本地存储方式,萤石云服务提供了一种更为方便且可靠的数据备份途径,特别是在拥有多个监控点或需防止设备失窃的情境下...
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 在移动应用开发领域中,Android平台与Unity3D引擎的整合是一项普遍存在的技术需求,特别是在游戏开发以及混合应用构建方面。本示例演示了如何在Android原生代码和Unity3D引擎之间建立高效的通信机制,以完成数据传递和功能执行的任务。为了有效运用此技术,必须充分认识Android和Unity3D各自的技术特性。 Android作为一个开源的移动操作系统,它提供了大量的应用程序接口和开发工具,适用于构建原生应用程序。而Unity3D则是一款支持多平台的游戏开发工具包,能够用来设计二维、三维游戏以及交互式体验。Unity3D具备卓越的图形渲染性能和便捷的编程接口,但有时需要与Android系统的功能相融合,例如接入硬件设备、管理系统级事件等。 当在Android设备上启动Unity3D应用时,一般通过UnityPlayer类来完成。UnityPlayer是Unity系统在Android设备上的连接媒介,能够用来运行Unity的编程代码或获取Unity的用户界面。举例来说,可以定义一个Intent对象,将信息打包后经由UnityPlayer传输给Unity,然后在Unity的C#编程环境中接收并处理这些信息。 相对于Unity3D调用Android系统,通常需要借助Unity的插件架构。开发者需编写Java语言编写的Android插件,并实现特定的程序接口,随后在Unity环境中使用DllImport指令导入这个插件。Unity会自动将Java代码编译并整合到工程中。执行时,通过Unity的DllImport函数调用Android插件的方法,从而执行Android设备上...
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 本文阐述了新型无线编码芯片EV1527在无线发射模块中的应用及其对应解码方法在无线接收模块中的达成。首先对编码芯片EV1527的操作进行了概述;其次阐述了两种解码方案:借助解码芯片TDH6300进行硬件解析、运用单片机执行软件解码;后详细地展示了这种编解码系统的实施。 ### EV1527编码芯片的应用及其解码方案 #### 一、引言 随着技术的革新,无线控制技术正迅速发展并得到普遍采用。常规的无线控制装置(如2262发射装置与2272接收装置)尽管应用广泛,但由于其硬件设定的地址码容易被仿制,存在显著的安全风险。与此形成对比的是,EV1527作为一种创新的无线编码芯片,能够提供更为安全且可靠的解决方案。本文将深入探讨EV1527编码芯片的应用及其相关解码策略。 #### 二、EV1527编码芯片概述 **1. EV1527的优势** - **不可仿制性:** EV1527内置有20位可预编程内码,理论上能够产生100万种不同的内码组合,这极大降低了编码重复的可能性。 - **自学习功能:** 发送与接收模块之间能够通过自学习过程完成配对,即便发射模块遗失,也能通过重新学习使原发射模块失效,从而增强安全性。 - **节能特性:** 在无按键触发时,芯片进入低功耗模式,有助于节约能源。 **2. EV1527的引脚功能** - **第5-8引脚:** 按键输入引脚,用于识别用户的操作。 - **第4引脚:** 数据输出引脚,用于传输经过编码的信号。 - **第1引脚:** 振荡电阻连接引脚,用于调节振荡周期。 - **第2引脚:** 电源输入引脚。 #### 三、发射模块的实...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值