第一章 kotlin基础知识
第一章 kotlin基础知识
文章目录
- 第一章 kotlin基础知识
- 前言
- 一、kotlin是什么?
- 二、kotlin基础知识
- 1.变量的声明
- 2.函数定义的几种方式
- 3.字符串与数字的转换
- 4.数组
- 5.列表
- 6.Map
- 7.When的使用
- 8.默认参数
- 9.Exception异常捕获
- 10.递归
- 11.尾递归优化
- 12.class类定义
- 13.继承和多态
- 14.抽象类和接口
- 15.委托和代理
- 16.单例模式
- 总结
前言
kotlin与java有一些相似之处。但也有很多不同,比如可以不写末尾的分号,类型和变量反着写(x:Int),与java正着写类型变量(int x)形成鲜明对比,写法不重要,习惯了就好。另外,kotlin有一些新的特性,可以大大简化代码。
一、kotlin是什么?
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。
Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。
在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。
二、kotlin基础知识
1.变量的声明
Byte,Int ,Long ,String 基础类型的变量声明 :
fun main(args: Array<String>) {var str = "test"println(str)var b: Byte = 10var i: Int = 12var j: Long = 10000000000000var s: String = "test"var a: Intval number="no"val aByte:Byte = Byte.MAX_VALUE;println("Byte的最大值"+aByte)val aInt:Int = 0b0011println("aInt的值是:"+aInt)printContent()
}fun printContent(){println("内容")
}
2.函数定义的几种方式
代码如下:
fun main(agrs:Array<String>){var result = add(2,3)println(result)var result2 = add2(2,3)println(result2)println("变量作为函数名:")var i = {x:Int,y:Int -> x+y}var result3 = i(2,3)println(result3)var j:(Int,Int)->Int = {x,y -> x+y}var result4 = j(2,3)println(result4)
}fun add(x: Int, y: Int): Int {return x+y
}fun add2(x: Int, y: Int): Int = x+y
3.字符串与数字的转换
代码如下:
var a = "12"var b = 12a = b.toString() //把b数字转换成字符串放入a里面b = a.toInt() //把a字符串转换成数字放入b里面println("${b} + 测试") //注:${b}属于字符串模板
4.数组
代码如下:
fun main(agrs:Array<String>) {var nums = 1 .. 100 //范围为[1 100]的闭区间var result = 0for (num in nums){result = result+num}println("结果:${result}")
}
5.列表
代码如下:
fun main(args:Array<String>){var lists = listOf("测试1","测试2","Test")for (list in lists) {println(list)}println("测试列表索引:")for((i,e) in lists.withIndex()){println("$i $e")}
}
6.Map
代码如下:
fun main(agrs:Array<String>){var map = TreeMap<String,String>()map["好"] = "good"map["学习"] = "study"map["天"] = "day"map["向上"] = "up"println(map["好"])
}
7.When的使用
代码如下:
fun numToChinese(num:Int):String{var result = when(num){1 -> "一"2 -> "二"3 -> "三"4 -> "四"5 -> "五"else -> "其他"}return result
}
8.默认参数
代码如下:
val Pi = 3.14159f
fun 获取圆的周长(PI:Float = Pi, 半径:Float):Float{return 2*PI*半径
}
fun main(agrs:Array<String>) {var area = 获取圆的周长(半径 = 2.0f)println(area)
}
9.Exception异常捕获
代码如下:
fun main(agrs: Array<String>) {while (true) {println("请输入第一个数字:")var num1str = readLine()println("请输入第二个数字:")var num2str = readLine()try {var num1: Int = num1str!!.toInt()var num2: Int = num2str!!.toInt()println("${num1} + ${num2} = ${num1 + num2}")} catch (e: Exception){println("您输入的不是数字。请输入数字")}}
}
10.递归
计算n的阶乘:
//5的阶乘 5*4*3*2*1 //n的阶乘?
fun main(args: Array<String>) {var num = 5//计算5的阶乘println(fact(num))
}
fun fact(num: Int): Int {if(num == 1){return 1} else {return num*fact(num-1)}
}
计算超大数的阶乘:
fun main(args: Array<String>) {var num = BigInteger("80")//计算num的阶乘println(fact3(num))
}
fun fact3(num: BigInteger): BigInteger {if(num == BigInteger.ONE){//或者可以写成BigInteger("1")return BigInteger.ONE} else {return num*fact3(num-BigInteger.ONE)}
}
11.尾递归优化
不使用尾递归优化时:
//5的累加 5+4+3+2+1 //n的累加?
fun main(args: Array<String>) {println(ollAdd(20000))//不能计算大整数的累加,例如计算20000的累加,会报错:java.lang.StackOverflowError
}
fun ollAdd(num: Int): Int {if(num == 1){return 1} else {return num+ollAdd(num-1)}
}
使用尾递归优化时:
fun main(args: Array<String>) {var result = 0println(ollAdd2(20000,result)) //通过tailrec尾递归优化,可以计算大整数的累加,例如计算20000的累加
}
tailrec fun ollAdd2(num: Int, result: Int): Int { //tailrec 尾递归优化println("计算机第${num}次运算,result=${result}")if(num == 0){return result} else {return ollAdd2(num-1, result+num)}
}
12.class类定义
kotlin的类的参数,同时也是类的成员属性,有点像java的带参数的构造方法,但java的构造方法的参数仅是形式参数,与类的成员属性无直接关系。
示例1:
//矩形 高 宽
class Rect(var height:Int, var width:Int)fun main(agrs:Array<String>) {var rect01 = Rect(20,10)println("矩形的高度:${rect01.height}")println("矩形的宽度:${rect01.width}")
}
示例2:
class People(var chactor:String, var voice:String){fun smile(){println("他笑了!!!")}fun cry(){println("他哭了!!!")}
}
fun main(agrs:Array<String>) {var people1 = People("认真","普通")println("people1这个人的声音:${people2.voice}")people2.cry()people2.smile()
}
示例3:
class WashMachine(var module: String, var size: Int) {var isDoorOpen = truevar currentMode = 0fun openDoor() {println("洗衣机的门已经打开了...")isDoorOpen = true}fun closeDoor() {println("洗衣机的门已经关闭了...")isDoorOpen = false}fun selectMode(mode: Int) {currentMode = modewhen (mode) {0 -> println("初始模式,请您选择模式")1 -> println("轻柔")2 -> println("狂揉")}}fun start() {if (isDoorOpen) {println("滴滴...门没有关,不能运行")} else {when (currentMode) {0 -> {println("选择模式错误,不能开始洗衣服")}1 -> {println("放水...")setMotorSpeed(1)println("轻柔开始,发动机转速 慢")}2 -> {println("放水...")setMotorSpeed(10)println("狂揉开始,发动机转速 快")}}}}private fun setMotorSpeed(speed:Int) {println("当前发动机转速为 ${speed}圈/秒")}
}
fun main(agrs: Array<String>) {var washMachine = WashMachine("某洗衣机品牌", 12)washMachine.openDoor()println("张三把衣服放进去了")washMachine.closeDoor()washMachine.selectMode(2)washMachine.start()
}
13.继承和多态
代码如下:
abstract class Human(var name: String) {abstract fun eat()abstract fun drink()
}
/*** 父亲*/
open class Father {var chactor:String = "性格内向"open fun action(){println("喜欢讲故事")}
}
/*** 孩子*/
class Son : Father() {//继承override fun action() {println("公众场合很有礼貌")}
}
class Man(name: String) : Human(name) {override fun eat() {println("${name}大口吃")}override fun drink() {println("${name}喝凉开水")}
}
class WoMan(name: String) : Human(name) {override fun eat() {println("${name}小口吃")}override fun drink() {println("${name}喝温开水")}
}
fun main(agrs:Array<String>) {var son1 = Son()println("儿子的性格${son1.chactor}")son1.action()var person1 = Man("张三")person1.eat()var person2 = WoMan("李四")person2.eat()var person3 = Man("王五")var person4 = WoMan("赵六")var person5 = Man("李七")var houseList = listOf<Human>(person1,person2,person3,person4,person5)for (h in houseList) {h.drink()}
}
14.抽象类和接口
代码如下:
interface IMan {fun height() //身高
}
interface IWoMan {fun test()
}
abstract class Human() {abstract fun eat()abstract fun drink()
}
class Man : Human(),IMan {override fun height() {println("身高较高")}override fun eat() {println("Man 吃")}override fun drink() {println("Man 喝")}
}
class WoMan : Human(),IWoMan {override fun test() {println("测试")}override fun eat() {println("WoMan 吃")}override fun drink() {println("WoMan 喝")}
}
fun main(agrs: Array<String>) {var man1 = Man()man1.height()var mWoMan = WoMan()mWoMan.drink()var house = listOf<Human>(man1, mWoMan)for (p in house) {if (p is Man){p.eat()}}
}
15.委托和代理
代码如下:
interface IWashBowl {fun washing()
}
/*** 大头儿子*/
class BigHeadSon : IWashBowl {override fun washing() {println("我是大头儿子,我在开心的洗碗,一次赚1块钱")}
}
//我是小头爸爸,我在开心的洗碗,一次赚10块钱
class SmallHeadFather : IWashBowl by BigHeadSon() {//使用委托 //爸爸委托儿子洗碗
}
fun main(agrs: Array<String>) {var son = BigHeadSon()son.washing()var father = SmallHeadFather()father.washing()
}
16.单例模式
单例模式,即内存中只存在一个此类的对象实例。使用object关键字。
/*** 大头儿子*/
object BigHeadSon : IWashBowl {override fun washing() {println("我是大头儿子,我在开心的洗碗,一次赚1块钱")}
}
interface IWashBowl {fun washing()
}
/*** 使用委托*/
class SmallHeadFather : IWashBowl by BigHeadSon {override fun washing() {println("我是小头爸爸,我赚了10块钱")BigHeadSon.washing()println("我是看着儿子把碗洗好了")}
}
fun main(agrs: Array<String>) {// var son = BigHeadSonBigHeadSon.washing()var father = SmallHeadFather()father.washing()var a = BigHeadSonvar b = BigHeadSonprintln(a==b)
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了kotlin的基础知识。下一章将继续介绍kotlin其他基础知识。
第一章 kotlin基础知识相关推荐
- 第一章计算机基础知识第一节,第一章 计算机基础知识 第一节
第一章计算机基础知识 第一节.了解计算机 尊敬的各位评委老师: 大家好!我今天说课的题目是<了解计算机>.我将从以下五方面来谈谈对这节课的设计:即说教材.学情分析.说教法和学法.说教学过程 ...
- 微型计算机基础 教案,第一章微型计算机基础知识新080902电子教案(153页)-原创力文档...
第一章 微型计算机基础知识;第一章? 微型计算机基础知识;§1.1 计算机中数的表示方法;1.1.1 进位计数制及各计数制间的转换;二进制数的特点; 十进制--符合人们的习惯二进制--便于物理实现十六 ...
- 计算机术语new一个,微机原理第一章计算机基础知识(new)
<微机原理第一章计算机基础知识(new)>由会员分享,可在线阅读,更多相关<微机原理第一章计算机基础知识(new)(47页珍藏版)>请在人人文库网上搜索. 1.1.第一章计算机 ...
- 自考第一章计算机基础知识,2018年自考计算机网络技术基础复习资料:第一章...
第一章 计算机基础知识 电子计算机的发展阶段分为: 1 第一代电子计算机.用电子管.以构成计算机的电子器件来1946年第一台电子计算机. 2 第二代电子计算机的特点是用晶体管. 3 第三代电子计算机的 ...
- 计算机基础知识作业,第一章计算机基础知识作业
第一章计算机基础知识作业 读书之法,在循序而渐进,熟读而精思 作业一计算机基础知识 一.作业目的 1.掌握 1)计算机的发展历史: 2)计算机的主要特点和应用领域: 3)计算机系统硬件组成和工作原理: ...
- 第一章计算机基础知识作业答案,第一章 计算机基础知识.doc第一次作业
交流 借鉴 第一章 计算机基础知识 一.单选题 1. 第四代电子计算机是( C )计算机. A.电子管 B.晶体管 C.大规模集成电路 D.人工智能 2.第一台电子计算机是1946年在美国研制的,该机 ...
- 计算机基础第一章知识题库,题库第一章计算机基础知识
题库第一章计算机基础知识 (51页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 23.9 积分 第一章 计算机基础知识一.判断正误题1.第二计算机的主存采 ...
- 海南大学计算机原理,海南大学微机原理课件 第一章 计算机基础知识
第一章 计算机基础知识 数 制 §1.1 一.计算机使用的数制及其相互转换 十进制(D).二进制(B).八进制(O)和十六进制(H). 数制中用少量数码按次序排列成数位,并按由低到高的进位方式进行计 ...
- 卫春芳计算机基础视频,第一章 计算机基础知识.pptx
文档介绍: 大学计算机基础主讲:数计学院卫春芳所用教材:<大学计算机基础>科学出版社大学计算机基础高等教育出版社杨振山龚沛曾主编大学计算机基础(第4版)大学计算机基础实验教程(电子版)参考 ...
最新文章
- 一位中学计算机老师的英语作文,我的老师英语作文(精选14篇)
- Corner Proposal Network 论文阅读(2020ECCV)
- faceboxes自定义encode
- bat 批处理切换到当前脚本所在文件夹
- 2013年未之wpf项目乱述
- 双系统(win8.1+ubuntu14.04)删除win下分区导致grub rescue解决方案
- 直线度误差 matlab,基于MATLAB的直线度误差数据处理
- 史记十表-卷十九-惠景间侯者年表第七
- 多御安全浏览器升级1.7.6版,新增扫描二维码功能
- 服务器行业深度解析:服务器未来需求知多少
- java计算机毕业设计驾校管理系统源码+mysql数据库+系统+lw文档+部署
- css 侧栏跟随_简单代码实现智能侧边栏跟随固定浮动的效果
- 音视频开发之旅(六) -----Android集成webrtc降噪和增益模块, ns_core函数简析
- 去除 WPS 的广告
- STM32实现按键控制继电器
- 一文让你彻底会用对象存储OSS的前端直传,不懂就再看一遍(bushi)
- python 按键精灵脚本_[620]使用Python实现一个按键精灵
- MySQL 确定哪些是叶节点、分子节点、根节点
- Go GUI---lxn/walk 自带demo学习---7.文件浏览器
- 百度AI,和“吴文俊奖”同行的十二年、千丈山、万里路
热门文章
- 简述3D角色动画的应用及三大类型
- Masking Adversarial Damage: Finding Adversarial Saliency for Robust and Sparse Network
- 互联网产品经理的月薪是多少?治好奇!
- “画仓鼠” 大赛,正式回归了!
- C语言 命令行 execl函数
- 神奇的 toLocaleString
- React-Navigation的goBack()跳转到指定页面,以及不同栈之间的页面的返回操作
- Problem A Artwork
- 【Android】图像滤镜框架GPUImage从配置到应用
- 初尝vue-element-admin