博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kotlin学习笔记-基础语法
阅读量:6981 次
发布时间:2019-06-27

本文共 3690 字,大约阅读时间需要 12 分钟。

去年学习过一遍Kotlin,相比java而言,Kotlin确实有许多方便的地方,但是学习之后一直没有真正拿来写项目,很久不用很多东西都已经忘记了。最近Google宣布Kotlin成为Android开发的官方语言之后,Kotlin突然变得火热起来,我也打算复习一遍Kotlin的语法(主要是和java不同的地方)并用笔记记录下来。

  • 基本数据类型 数值类型
Type Byte Short Int Long Float Double
Bit Width 8 16 32 64 32 64

字面常量

十进制:123 长整型以大写的 L 结尾:123L 16 进制以 0x 开头:0x0F 2 进制以 0b 开头:0b00001011 注意:8进制不支持 Kotlin 同时也支持传统符号表示的浮点数值: Doubles 默认写法: 123.5, 123.5e10 Floats 使用 f 或者 F 后缀:123.5f

可以使用下划线使数字常量更易读:

val oneMillion = 1_000_000 val creditCardNumber = 1234_5678_9012_3456L val socialSecurityNumber = 999_99_9999L val hexBytes = 0xFF_EC_DE_5E val bytes = 0b11010010_01101001_10010100_10010010

Boolean 类型:truefalse

  • ** ===和==** 在 Kotlin 中,三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小。
  • 位运算 kotlin
var andResult  = a and bvar orResult   = a or bvar  xorResult  = a xor bvar rightShift = a shr 2var leftShift  = a shl 2复制代码

java

int andResult  = a & b;int orResult   = a | b;int xorResult  = a ^ b;int rightShift = a >> 2;int leftShift  = a << 2;复制代码
  • 变量var和常量val
var a = "a"var b = 1var c: Int = 1val d: Int = 1// 常量,相当于java中的final,创建的时候必须初始化复制代码
  • 方法 没有返回值
fun foo(x: Int, y: Int) {}复制代码

带有返回值

fun foo(x: Int, y: Int): Int {    return x + y}复制代码

默认参数

fun foo(x: Int = 1, y: Int = 2): Int {    return x + y}复制代码
  • 扩展 Kotlin 的扩展是指在不使用继承的方式下对一个类的方法和属性进行扩展,被扩展的类代码本身不会造成任何影响。
    1. 扩展函数,为ImageView扩展loadImage方法:
fun ImageView.loadImage(url: String) {    Glide.with(this.context).load(url).into(this)}复制代码
  1. 扩展属性 扩展并不会真正给类添加了成员属性,因此也没有办法让扩展属性拥有一个备份字段.这也是为什么初始化函数不允许有扩展属性。扩展属性只能够通过明确提供 getter 和 setter方法来进行定义
var ImageView.index: Int    set(value) {        tag = value    }    get() = tag as Int复制代码
val ImageView.area: Int    get() = width * height复制代码
  1. 扩展的作用域: 扩展的作用域限于当前package,不同package的扩展可以通过import导入使用
  • Lambda表达式
textView.setOnClickListener { v -> Toast.makeText(v.context, "onClick", Toast.LENGTH_SHORT).show() }复制代码
val sum: (Int, Int) -> Int = { x, y -> x + y }sum(1,2)复制代码
  • Null指针
var p: Person? = nullvar name = p!!.name //p为null抛出NullPointerException var age = p?.age//p不为null才会为age赋值复制代码
  • 字符串 Kotlin 支持三个引号 """ 扩起来的字符串
//输出结果会保留换行val text = """    java    kotlin    groovy    """复制代码
//删除每行前面的空格val text = """  |java  |kotlin  |groovy  """.trimMargin()复制代码
  • 字符串模板
var name = "Katy Perry"var age = "12"var str = "My name is: $name,My age is $age"var firstName = "My name is: ${name.substring(4)}"复制代码
  • When语句 when语句相当于java中的switch语句
when (any) {    is String ->    return "string"    is Int ->    return "Int"    is Boolean ->    return "Boolean"    else    -> return "other"}复制代码
  • 控制语句返回值 if else
var a = if (x > y) x else yvar b = if (x > y) x else if (x < y) y else 0复制代码

when

val result = when (any) {    is String ->        "string"    is Int ->        "Int"    is Boolean ->        "Boolean"    else    -> "other"}复制代码
  • is Kotlin
if (x is Int) {}复制代码

java

if(x instanceof Integer){ }复制代码
  • as kotlin
val s = a as?  String复制代码

类型转换的时候可能会抛出ClassCastException,在kotlin中可以使用as?,转换失败返回null,而不是抛出异常 java

String text = (String) a;复制代码
  • in
if (x in 0..10) {}for (i in 0..10) {}复制代码
  • Collections kotlin
var numbers = listOf(1, 2, 3)var map = mapOf(1 to "One",        2 to "Two",        3 to "Three")复制代码

java

List
numbers = Arrays.asList(1, 2, 3);Map
map = new HashMap<>();map.put(1,"One");map.put(2,"Two");map.put(3,"Three");复制代码

kotlin

numbers.forEach {    println(it)}numbers.filter  { it > 5 }       .forEach { println(it) }复制代码

java

for (int number : numbers) {  System.out.println(number);}for (int number : numbers) {  if(number > 5) {    System.out.println(number);  }}复制代码
  • 别名 类型别名为现有类型提供替代名称,如果类型名称太长,你可以另外引入较短的名称,并使用新的名称替代原类型名。
class Foo {    fun bar() {        println("foo")    }}typealias F = Foofun main(args: Array
) { val f = F() f.bar()}复制代码

转载地址:http://cljpl.baihongyu.com/

你可能感兴趣的文章
【产品日记】51CTO用户中心v1.1发布
查看>>
primesfaces入门 ,配置
查看>>
怎么用js来获取 fileupload中的上传文件的文件名。
查看>>
创建tableview
查看>>
22个所见即所得在线 Web 编辑器
查看>>
CentOS memcached安装和启动
查看>>
birt报表按字段分组后批量打印(每个字段数据一页)以及空数据显示特定字段...
查看>>
ubuntu安装oracle10G的时候界面乱码.
查看>>
尝试OUTFIle、INFILE快速导入导出数据
查看>>
“形式”系统的含义辨析
查看>>
【搜索引擎基础知识2】网络爬虫
查看>>
Aptana Studio 3 汉化
查看>>
phonegap+jquerymobile开发android的心得(4)
查看>>
python 使用PyTesser--安装
查看>>
MAC 上使用pem秘钥 远程登录linux
查看>>
无需编译,1分钟安装Ubuntu官方构建的最新版Linux内核
查看>>
解压即用,Ubuntu上Nginx/Apache/PHP编译打包
查看>>
详解-斗鱼弹幕API-接入(斗鱼弹幕服务器第三方接入协议)
查看>>
table设置border没有空隙
查看>>
升级 Vim 7.4 On Ubuntu 13.10, 13.04, 12.04, Linux...
查看>>