kotlin学习之基础(一)
目录
- 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学习之基础(一)相关推荐
- Kotlin学习笔记-基础语法
去年学习过一遍Kotlin,相比java而言,Kotlin确实有许多方便的地方,但是学习之后一直没有真正拿来写项目,很久不用很多东西都已经忘记了.最近Google宣布Kotlin成为Android开发 ...
- 【Kotlin】学习小记-基础篇
Kotlin学习小记-基础篇 Kotlin的介绍 入门基础篇 属性声明 关于val和final的小Tips 参数 1.可变参数 2.命名参数 函数返回值 1.默认返回Unit值 2.返回Nothing ...
- kotlin学习目录
目录 kotlin学习之基础(一) kotlin学习之函数(二) kotlin学习之类(三) kotlin学习之类的扩展(四) kotlin学习之密封类(五) kotlin学习之嵌套类和内部类(六) ...
- Kotlin学习笔记(1)-- 基础语法
文章目录 Kotlin学习笔记(1)-- 基础语法 输出 语法 代码 输出 可读可改(var) 语法 代码 输出 内置数据类型 只读变量(val) 类型推断 编译时常量 语法 代码 输出 引用类型 r ...
- Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~
又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...
- Kotlin学习(一):Kotlin基础知识
Kotlin学习(一):Kotlin基础知识 定义变量常量 在Kotlin中,定义变量时有以下几点与java不同: 位置不同:在 Kotlin 中,数据类型要放到变量后面,并且用冒号(:)分隔,这正好 ...
- kotlin语法的基础学习和进阶学习
Kotlin的进阶学习 1基础的函数使用 2let apply also run 内置函数的使用 3可变集合和不可变集合的学习 3kotlin中类字段field属性的使用 4Kotlin中的面向对象学 ...
- Kotlin学习之起始篇—基础语法
Kotlin学习之起始篇-基础语法 Kotlin被Android接纳为官方语言已经一年多了,现在才开始学习,实在惭愧.希望能一点点进步,到最后能完全用Kotlin开发app.废话就不多说了.Let's ...
- Kotlin 学习笔记(八)—— Kotlin类与对象之接口
Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...
最新文章
- 初探maven插件机制
- 自定义控件:侧滑面板
- 算法复习(7)有序二叉树
- Cpp 对象模型探索 / 静态联编和动态联编
- 我用代码来给你们分析一个赚钱的技巧
- 如何在 Docker 环境下自动给 .NET 程序生成 Dump
- 2015年C语言组混搭 C/C++
- 2020 OPPO 开发者大会重磅推出 ColorOS 11,适配机型达 33 种
- 基于FPGA的光口通信开发案例
- 计算机视觉 -- Homography单应性矩阵
- 下载新浪android SDK
- eureka 缺点
- jqGrid双击事件,并获取双击行的各个属性值
- Eterm协议中文汉字编码
- 常见的测试用例设计方法7---因果图法
- 微软服务器管理员证书,微软认证 Azure 管理员培训
- Alexnet详解以及tesnsorflow实现alexnet;什么是alexnet alexnet能做什么;alexnet教程
- 杭州市建筑工程职称评审工作
- 计算机在线给手机杀毒,怎么用电脑给手机杀毒(如果手机中病毒了怎么办)
- Emoji处理方式大起底