目录

  • 1. 基础

    • val和var
    • 支持数字字面加下划线
    • 自动装箱
    • 注意比较
    • 类型转换
    • 位运算
    • 数组
    • map
  • 2. 控制流
    • if
    • for
    • when
  • 3. 异常

这一节主要介绍Kotlin基础部分,与Java有区别的地方。介绍一些基础,控制流和异常内容。

1. 基础

val和var

var指向可变引用

val指向一个不可变的引用,但是如果这个引用是可变的

val languages = array("Java","C++");
//languages = array("Java","C++") //错误
languages.add("kotlin") //正确

支持数字字面加下划线

val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L

自动装箱

val a: Int = 10000 //a是基础类型
val b: Int? = 10000//b是装箱猴的包装类型

注意比较

注意比较(equals(),==\,=\==)

kotlin的==类似但是不等于equal(),等于a?.equal(b)?:b==null,这样就不用考虑空指针的问题,但是与equals()比较类似,就不用equals()单独拿出来对比。

==可以理解为数值上的相等,===理解地址的相等

// 基础类型与基础类型的对比
val a : Int = 10000
val b : Int = 10000
println(a == b)
println(a === b)
// 基础类型与包装类型的对比
val a : Int = 10000
val b : Int?= 10000
println(a == b)
println(a === b)
// 包装与包装类型的对比
val a : Int? = 10000
val b : Int? = 10000
println(a == b)
println(a === b)
// true true true false true false// 将一个基础类型装箱不能保证同一性但不能保证相等性
val a : Int = 10000
val b : Int? = a
val c : Int? = a
println(b == c)
println(b === c)
// true false// kotlin跟java一样会缓存-128-127之间的int包装类型
val a : Int = 127
val b : Int? = a
val c : Int? = a
println(b == c)
println(b === c)
// true true

类型转换

Java的基础类型是可以由小类型转大类型的,而Kotlin不行,更别说包装类型了

val b: Byte = 1 // OK
val i: Int = b // 错误val b: Byte? = 1 // OK
val i: Int? = b // 错误// 如果需要显示转换,要拓宽数据
val i: Int = b.toInt() // 显式拓宽
print(i)

位运算

不支持直接使用位运算,需要调用对应函数

shl(bits) – 有符号左移 (Java 的 <<)
shr(bits) – 有符号右移 (Java 的 >>)
ushr(bits) – 无符号右移 (Java 的 >>>)
and(bits) – 位与
or(bits) – 位或
xor(bits) – 位异或
inv() – 位非

数组

可以理解Kotlin把数组整合成了一个类Array,这个类具有size属性、get、set方法,它的创建函数是:

arrayOf(1,2,3) // 直接传递元素
arrayOfNulls() //元素为空的数组// 创建一个 Array<String> 初始化为 ["0", "1", "4", "9", "16"],中括号的参数是索引
val asc = Array(5) { i -> (i * i).toString() }for (item in collection) { print(item) }

遍历查看下面的for循环

map

    val airports= mapOf<String ,String>(Pair("PVG","浦东"),Pair("SHA","虹桥"),Pair("HGH","萧山"))println(airports.size)println(airports["PVG"])for((add,where) in airports){println("$add = $where")}

2 .控制流

if

if not null 写成 printf(files?.size)
if not null and else 写成 println(files?.size?:"empty")
if null 写法 val email = values["email"] ?: throw IllegalStateException("Email is miss")

for

//遍历元素
for (item in collection) { print(item) }//遍历索引,(更加智能的方案)
for (index in 0..viewGroup.getChildCount() - 1) { val view = viewGroup.getChildAt(index) view.visibility = View.VISIBLE }//在我们迭代一个a数组或集合,indices直接获得索引范围
for (i in array.indices) print(array[i])

when

when表达式与Java中的switch/case类似,但是要强大得多。

这个表达式会去 试图匹配所有可能的分支直到找到满意的一项,然后它会运行右边的表达式,可以增加else分支匹配无分支匹配的情况。

3. 异常

Kotlin不区分受检异常和非受检异常,通常在catch中返回值而不是抛出错误。try/catch可以作为一个表达式。

//java
public class TryCatchAndFinally {public static void main(String[] args){BufferedReader bufferedReader = new BufferedReader(new StringReader("234"));try {System.out.println(readNumber(bufferedReader));} catch (IOException e) {e.printStackTrace();}}public static int readNumber(BufferedReader reader) throws IOException {try {String readLine = reader.readLine();return Integer.parseInt(readLine);} catch (NumberFormatException e) {return -1; //不是数字,返回-1}finally {reader.close();}}
}
//kotlin
fun readNumber(reader: BufferedReader){val number = try {Integer.parseInt(reader.readLine())}catch (e: NumberFormatException){null}println(number)
}fun main(args: Array<String>) {val bufferedReader = BufferedReader(StringReader("not a number"))readNumber(bufferedReader)
}

kotlin学习之基础(一)相关推荐

  1. Kotlin学习笔记-基础语法

    去年学习过一遍Kotlin,相比java而言,Kotlin确实有许多方便的地方,但是学习之后一直没有真正拿来写项目,很久不用很多东西都已经忘记了.最近Google宣布Kotlin成为Android开发 ...

  2. 【Kotlin】学习小记-基础篇

    Kotlin学习小记-基础篇 Kotlin的介绍 入门基础篇 属性声明 关于val和final的小Tips 参数 1.可变参数 2.命名参数 函数返回值 1.默认返回Unit值 2.返回Nothing ...

  3. kotlin学习目录

    目录 kotlin学习之基础(一) kotlin学习之函数(二) kotlin学习之类(三) kotlin学习之类的扩展(四) kotlin学习之密封类(五) kotlin学习之嵌套类和内部类(六) ...

  4. Kotlin学习笔记(1)-- 基础语法

    文章目录 Kotlin学习笔记(1)-- 基础语法 输出 语法 代码 输出 可读可改(var) 语法 代码 输出 内置数据类型 只读变量(val) 类型推断 编译时常量 语法 代码 输出 引用类型 r ...

  5. Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~

    又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...

  6. Kotlin学习(一):Kotlin基础知识

    Kotlin学习(一):Kotlin基础知识 定义变量常量 在Kotlin中,定义变量时有以下几点与java不同: 位置不同:在 Kotlin 中,数据类型要放到变量后面,并且用冒号(:)分隔,这正好 ...

  7. kotlin语法的基础学习和进阶学习

    Kotlin的进阶学习 1基础的函数使用 2let apply also run 内置函数的使用 3可变集合和不可变集合的学习 3kotlin中类字段field属性的使用 4Kotlin中的面向对象学 ...

  8. Kotlin学习之起始篇—基础语法

    Kotlin学习之起始篇-基础语法 Kotlin被Android接纳为官方语言已经一年多了,现在才开始学习,实在惭愧.希望能一点点进步,到最后能完全用Kotlin开发app.废话就不多说了.Let's ...

  9. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

最新文章

  1. 初探maven插件机制
  2. 自定义控件:侧滑面板
  3. 算法复习(7)有序二叉树
  4. Cpp 对象模型探索 / 静态联编和动态联编
  5. 我用代码来给你们分析一个赚钱的技巧
  6. 如何在 Docker 环境下自动给 .NET 程序生成 Dump
  7. 2015年C语言组混搭 C/C++
  8. 2020 OPPO 开发者大会重磅推出 ColorOS 11,适配机型达 33 种
  9. 基于FPGA的光口通信开发案例
  10. 计算机视觉 -- Homography单应性矩阵
  11. 下载新浪android SDK
  12. eureka 缺点
  13. jqGrid双击事件,并获取双击行的各个属性值
  14. Eterm协议中文汉字编码
  15. 常见的测试用例设计方法7---因果图法
  16. 微软服务器管理员证书,微软认证 Azure 管理员培训
  17. Alexnet详解以及tesnsorflow实现alexnet;什么是alexnet alexnet能做什么;alexnet教程
  18. 杭州市建筑工程职称评审工作
  19. 计算机在线给手机杀毒,怎么用电脑给手机杀毒(如果手机中病毒了怎么办)
  20. Emoji处理方式大起底

热门文章

  1. windbg 符号表
  2. MFC 界面美化 Skinmagic
  3. base64编解码的类
  4. 【Boost】boost库中bind的用法
  5. 指令和伪指令和宏指令区别
  6. MFC中动态数组CArray的使用
  7. 在类模板的声明和定义中把.h与.cpp分离
  8. kubernetes(七)项目部署方式:蓝绿部署,灰度发布/金丝雀发布,滚动更新
  9. Highly Available (Mirrored) Queues
  10. 【内容生产创“新”之道】