[Kotlin] Kotlin基础 - 1 基础类型

目录:Kotlin中的基础类型

- 变量

- 数值型

- 布尔类型

- null安全

- 字符串类型

- 类型别名


- 变量

1、分隔符

(1)分号:与Java不同,Kotlin并不强制要求每条语句必须以分号结尾。

(2)花括号、方括号、圆括号、空格:与Java类似。

(3)圆点:通常用作类、结构体、枚举、实例和它的成员(包括属性和方法)之间的分隔符,表明调用某个类或某个实例的指定成员。

2、标识符规则与Java类似

3、一些特殊的关键字

as:用于做类型转换或为import 语句指定别名。

as?:类型安全的类型转换运算符。

fun:声明函数。

in 与 !in:在for 循环中使用; in 还可作为双目运算符,检查一个值是否处于区间或集合内;in 也可在when 表达式中使用; in 还可用于修饰泛型参数,表明该泛型参数支持逆变。

is 与 !is:用于做类型检查(类似Java 的instanceof) 或在when 表达式中使用。

typealias:用于定义类型别名。

val:声明只读属性或变量。

var:声明可变属性或变量。

when:用于when 表达式。

by:用于将接口或祖先类的实现代理给其他对象。

delegate:用于指定该注解修饰委托属性存储其委托实例的字段。

dynamic:主要用于在Kotlin/JavaScript中引用一个动态类型。

field:用于指定该注解修饰属性的幕后字段。

file:用于指定该注解修饰该源文件本身。

init:用于声明初始化块。

param:用于指定该注解修饰构造器参数。

property:用于指定该注解修饰整个属性(这种目标的注解对Java 不可见,因为Java并没有真正的属性)。

receiveris:用于指定该注解修饰扩展方法或扩展属性的接收者。

set:用于声明属性的setter方法,或者用于指定该注解修饰属性的setter方法。

setparam:用于指定该注解修饰setter方法的参数。

get:用于声明属性的getter 方法,或者用于指定该注解修饰属性的getter方法。

where:用于为泛型参数增加限制。

companion:用于声明一个伴生对象。

lateinit:用于修饰一个non-null 属性,用于指定该属性可在构造器以外的地方完成初始化。

open:用于修饰类,表示该类可派生子类;或者用于修饰成员,表示该成员可以被重写。

sealed:用于声明一个密封类。

suspend:用于标识一个函数后Lambda表达式可作为暂停。

vararg:用于修饰形参,表明该参数是个数可变的形参。

4、声明变量

Kotlin是强类型的语言,Kotlin要求所有的变量必须先声明、后使用,声明变量时必须显式或隐式指定变量的类型,类型限制了一个变量能被赋的值,也限制了一个表达式可以产生的值,还限制了在这些值上可以进行的操作,井确定了这些操作的含义。

var|val 变量名 [:类型] [=初始值]
—— 其中,var声明的变量是值可变的(可被多次赋值),使用val声明的变量是值不可变的(不能被重新赋值〉
如:
var b: Int = 5
var name = "rookie"

需要注意的是,程序要么通过“:类型”的形式显式指定该变量的类型,要么为该变量指定初始值一-Kotlin编译器将会根据该初始值确定变量的类型,不能声明变量时既不指定变量类型,也不指定变量初始值。

- 数值型

1、整型

Byte:-128~127,兼容Java 的byte和Byte类型。

Short:-32768(-2的15次方)~32767(2的15次方-1 ),兼容Java的short和Short 类型。

Int:-2147483648(-2的31次方 )~2147483647(2的31次方-1 ),兼容Java的int和Integer类型。未指定类型时,Kotlin会自动判断该变量类型为Int。

Long:(-2的63次方 )~(2的63次方-1 ),兼容Java的long和Long类型。

注意:Kotlin语言允许在己有数据类型后添加“?”,添加“?”后的数据类型相当于对原有类型进行了扩展,带“?”的数据类型可支持被赋予null 值。

同时,不带“?”普通类型的整型变量将会映射成Java 的基本类型,如int;而带“?”后缀的整型变量将会映射成基本类型的包装类,如Integer。

// Int 型变量不支持null 值,所以下面代码是错误的
var notNull: Int = null
// Int ?相当于支持null 值的Int 型,所以下面代码是正确的
var nullable : Int? = null

为了提高可读性,Kotlin允许在数值中增加下划线,或者在前面添加额外的零。

val oneMillion = 0000100_0000

2、浮点型

Kotlin的浮点类型与Java相似,包含Float和Double两种。

3、字符型

Kotlin中,字符型必须使用单引号(’)括起来,但是与Java不同的是,Kotlin的Char变量不能当成整型使用,两种类型之间是不能相互转换的。

4、数值型之间的转换

需要特别注意的是,Kotlin是一门强类型语言,是不支持低精度数据直接隐式转换为转换为高精度类型,所涉及到的类型转换必须显式调用toXXX()方法。

但是在Kotlin的表达式当中是支持自动类型转换的,但这种转换是基于上下文推断出来的,而且算术运算会有重载做适当转换。

- 布尔类型

Kotlin中的布尔类型与Java中相似。

- null安全

NPE是一个老生常谈的问题,可以说是对Java的重大改进之一。

只有可空类型的变量或常量才能接受null,非空类型则不能接收null,通过在基本数据类型后添加“?”来区分是否可空。

可空类型的变量不允许直接调用方法或属性,但可以先判断该变量不为null ,然后再调用该变量的方法或属性。

Kotlin可以实现安全调用,并支持链式调用。主要使用“?.”。

fun main() {
    var test: String? = "rookie"
    print(test?.length)
    // 此时输出 6
    test = null
    print(test?.length)
    // 此时输出 null
}

Kotlin中还支持Elvis运算简化if-else方法。

fun main() {
    var test: String? = "rookie"
    var t1 = if (test != null) test.length else -1
    var t2 = test?.length ?: -1
    // 两种方式是等价的
}

此外,Kotlin还支持强制调用。强制调用是为NPE “ 爱好者”准备的一一不管变量是否为null ,程序都直接调用该变量的方法或属性。Kotlin 也为这种用法提供了支持,用“ !!."可强制调用可空变量的方法或属性,但是这可能会引发NPE。

- 字符串类型

Kotlin中的字符串有两种字面值。一个是转义字符串,它是可以包含转义字符的,这点很像Java的字符串;另外一个原始字符串,可以包含换行符或者其他任意文本,比较特殊的是需要用三引号括起来。

Kotlin 允许在字符串中嵌入变量或表达式,只要将变量或表达式放入 ${}。这样Kotlin将会把该变量或表达式的值嵌入该字符串中。

此外,Kotlin也像Java一样提供了很多便捷的方法,使用时查阅相关资料即可。

- 类型别名

Kotlin提供了类似于C 语言中的typedef的功能: 可以为己有的类型指定另一个可读性强的名字。如:

//为A.Inner 内部类指定别名
typealias AInner =A.Inner
//为B.Inner 内部类指定别名
typealias BInner = B.Inner

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值