1.1 创建类与实例

类的属性可以在其声明或主体中列出。具有类声明中所列参数的默认构造函数会自动可用。类之间继承由冒号(:)声明。默认情况下类都是 final 的;如需让一个类可继承, 请将其标记为 open

open class Shapeclass Rectangle(var height: Double, var length: Double): Shape() {var perimeter = (height + length) * 2
}fun main() {val rectangle = Rectangle(5.0, 2.0)println("The perimeter is ${rectangle.perimeter}")
}

1.2 集合

通过listOf创建集合对象,

fun main() {val items = listOf("apple", "banana", "kiwifruit")// 对集合进行迭代。for (item in items) {println(item)}// 使用 in 操作符来判断集合内是否包含某实例。when {"apple" in items -> println("apple")"banana" in items -> println("banana")"kiwifruit" in items -> println("kiwifruit")}// 使用 lambda 表达式来过滤(filter)与映射(map)集合items.filter { it.startsWith("a") }.sortedBy { it }.map { it.uppercase() }.forEach { println(it) }
}

1.3 空值与空检测

当可能用 null 值时,必须将引用显式标记为可空。可空类型名称以问号(?)结尾。

// 如果 str 的内容不是数字返回 null
fun parseInt(str: String): Int? {return str.toIntOrNull()
}fun printProduct(arg1: String, arg2: String) {val x = parseInt(arg1)val y = parseInt(arg2)// x为null的情况if (x == null) {println("Wrong number format in arg1: '$arg1'")return}// y为null的情况if (y == null) {println("Wrong number format in arg2: '$arg2'")return}// 在空检测后,x 与 y 会自动转换为非空值println(x * y)
}fun main() {printProduct("1", "a")
}

1.4 类型检测与自动类型转换

is 操作符检测一个表达式是否某类型的一个实例。 如果一个不可变的局部变量或属性已经判断出为某类型,那么检测后的分支中可以直接当作该类型使用,无需显式转换:

fun getStringLength(obj: Any): Int? {if (obj is String) {// `obj` 在该条件分支内自动转换成 `String`return obj.length}if (obj !is String) {// `obj` 不是 `String`的情况,直接返回nullreturn null}// 在离开类型检测分支后,`obj` 仍然是 `Any` 类型return null
}

【Kotlin基础系列】第2章 基本语法(2)相关推荐

  1. 【Kotlin基础系列】第1章 简介

    1.1 Kotlin简介 Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发.是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐. 它简洁.安全.可与 Java 及 ...

  2. 【Kotlin基础系列】第2章 基本语法(1)

    基础语法中主要说明以下几点: 1.1 包的声明应处于源文件顶部. 目录与包的结构无需匹配:源代码可以在文件系统的任意位置. 1.2 变量 val:只读局部变量,只能为其赋值一次:var:可重新赋值的变 ...

  3. 【Kotlin基础系列】第5章 控制流程

    1 条件与循环 1.1 If 表达式 if else同Java,区别有两个: 1.使用if else代替Java的三目运算(a > b? a:b) 2.if 表达式的分支可以是代码块,这种情况最 ...

  4. 【Kotlin基础系列】第4章 类型

    1 基本类型 在 Kotlin 中,所有东西都是对象,在这个意义上讲我们可以在任何变量上调用成员函数与属性. 一些类型可以有特殊的内部表示--例如,数字.字符以及布尔可以在运行时表示为原生类型值,但是 ...

  5. 【Kotlin基础系列】第7章 类与对象(2)--- 继承

    1 继承 在 Kotlin 中所有类都有一个共同的超类 Any,对于没有超类型声明的类它是默认超类,Any 有三个方法:equals(). hashCode() 与 toString().因此,为所有 ...

  6. 【Kotlin基础系列】第6章 包与导入

    源文件通常以包声明开头: package org.examplefun printMessage() { /*--*/ } class Message { /*--*/ }// -- 源文件所有内容( ...

  7. 【Kotlin基础系列】第7章 类与对象(1)--- 类

    1 类 Kotlin 中使用关键字 class 声明类.类声明由类名.类头(指定其类型参数.主构造函数等)以及由花括号包围的类体构成.类头与类体都是可选的: 如果一个类没有类体,可以省略花括号. cl ...

  8. 【Kotlin基础系列】第3章 习惯用法

    1.1 创建 DTO(POJO/POCO) val的属性只有getter,var的属性还有setter方法.当然也有equals(),hashCode(),toString(),copy()等方法 d ...

  9. jupyther_python基础系列 09 第九章 有益的探索

    Table of Contents 1  第九章 有益的探索 1.1  数据类型的底层实现 1.1.1  奇怪的列表 1.1.2  神秘的字典 1.1.3  紧凑的字符串 1.1.4  是否可变 1. ...

最新文章

  1. AES加密补位填充的一个问题
  2. 全排列算法的全面解析
  3. 广州自由自在进口食品休闲消费的趋势
  4. 《Effective C#》Item 17:减少装箱(Boxing)和拆箱(Unboxing)操作
  5. 修改eclipse默认编码方式
  6. MyEclipse2015Stable2.0安装破解
  7. 实现(手撕)遗传算法与集成学习-人工智能大作业(特征选择其实是乱选的,抄的别人的,,,)
  8. JwPlayer播放器【去除Logo、去除版本信息】
  9. MikroTik RouterOS电子克隆盘原理收集
  10. hibernate历史版本下载
  11. Unity中世界坐标与相对于某个物体的相对坐标的转换
  12. Python代码打包在xp系统上运行~~
  13. android视频教程_创建数据库与完成数据添删改查,17_创建数据库与完成数据添删改查...
  14. face_recognition库的安装以及学习
  15. dtmf拨号原理matlab,matlab综合实验dtmf拨号器设计.doc
  16. Image Splicing Forgery Detection Combining Coarse to Refined Convolutional Neural Network and Adapti
  17. 无主之地3重型武器节奏评分榜(9.25) 枪械名 红字效果 元素属性 清图评分 Boss战评分 泛用性评分 特殊性评分 最终评级 掉落点 掉率 图片 瘟疫传播
  18. TokenGazer评级丨TRON:BTT众筹谋求熊市破局,生态繁荣但数据受到质疑
  19. echarts饼图设置每个扇形的颜色
  20. micropython移植教程_移植MicroPython到NUCLEO_L476RG开发板

热门文章

  1. 不规则图形数格子的方法_常见的估算不规则图形的面积.ppt
  2. Error cleaning up after pivot: remove /.pivot_root162611078: device or resource busy
  3. CRC校验笔记 C语言代码分析
  4. iOS Platform文件百度云盘下载地址
  5. 教你一招!如何用 Python 实现 QQ 消息自动回复?
  6. android 自定义心电图,手把手教你打造一个心电图效果View Android自定义View(示例代码)...
  7. 在html中写响应式布局的代码,手机端自适应响应式框架,移动端响应式布局代码...
  8. hjr-四旋翼飞行器串级PID飞控算法
  9. 如下篇文章写的不错!
  10. c语言中关于不包含头文件string.h仍然可以使用strlen函数以及strlen函数计算数组时结果问题