一、main和打印
fun main() {
println("Helo Kotlin")
}
kotlin中,新建一个main函数可以调试kotlin程序,println函数可以将结果输出到控制台。
二、常量和变量
val:只读变量(只读,不可变化)
var:变量
const val: 常量
常量不能在函数中使用,只能在方法外面使用,比如:
const val USERNAME: String = "zhangsan"
fun main() {
}
如果在类中使用的话,比如:
class Hello {
const val USERNAME: String = "zhangsan"
}
这种做法是不被允许的,它在源码阶段就直接报错,因为外界根本无法用类直接访问该
常量,为了让外界能用类访问常量,可以改成:
object Hello {
const val USERNAME: String = "zhangsan"
}
访问方式:Hello.USERNAME
被 object 修饰的类相当于将该类的成员变量和成员方法都添加了java的static的
关键字。
一般情况下,将类中所有的成员都static化很少见,甚至不可取,所以我们可以将类
中的部分成员static化,使用kotlin的伴生 companion object 可以实现:
class Hello {
companion object {
const val USERNAME: String = "zhangsan"
}
}
在类中,凡是 companion object 闭包下的成员在外接都可以直接通过类访问。
不在companion object 闭包下的成员在外界无法直接用类访问。
三、基本类型
在 Kotlin 中,基本类型包括 数字
、字符
、布尔值
、数组
与字符串
。
【1】数字
Kotlin 提供了一组表示数字的内置类型。 对于整数,有四种不同大小的类型,因此值的范围也不同。
val byteClassType = 1.toByte()
println(byteClassType::class.java)
val shortClassType = 128.toShort()
println(shortClassType::class.java)
val intClassType = 1
println(intClassType::class.java)
val longClassType = 9223372036854775807
println(longClassType::class.java)
如上代码打印了四种数据类型:
byte
short
int
long
整型值初始化的变量默认推断为 Int 类型,Byte和Short的精度比Int小,如果需要使用它们,需要转换类型,一般使用 toByte 和 toByte 函数来转换。
如果数字在Long范围内,会自动推断为Long类型。
除此之外,可以在数字后面加上 L
来强制限定数字的类型为Long类型。
val longClassType = 1L
如果数字超过Long的范围,那么编译器报错。
kotlin还提供了两种浮点类型,分别是Float、Double
类型 | 大小(比特数) | 有效数字比特数 | 指数比特数 | 十进制位数 |
Float | 32 | 24 | 8 | 6-7 |
Double | 64 | 53 | 11 | 15-16 |
浮点类型默认推断为Double类型:
val floatClassType = 3.14
如果想要用Float类型表示,那么需要在数字前面添加字母F
或者f
。
val longClassType = 3.14F
【2】字面常量
1、十进制表示:123
Long类型表示:123L
2、二进制表示:
0b00001011
3、十六进制表示:
0x0F
4、不支持八进制
5、默认浮点类型是Double类型 123 或者 1.23e2(e可以是大写E也可以是小写e)
Float类型需要添加`F` 或者 `f`
【3】数字字面值的下划线
val one = 1_000_000
val two = 1234_5678_9012_3456L
val three = 999_99_9999L
val four = 0xFF_EC_DE_5E
val five = 0b11010010_01101001_10010100_10010010
数字如果太长,可以使用下划线类分割。
【4】数字的显示转换
kotlin中数字不支持隐式转换,但支持显示转换
val a = 3
val b:Long = a.toLong()
数字的显示转换函数有:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
【5】运算符
+ 加
- 减
* 乘
/ 除
shl 有符号左移
shr 有符号右移
ushr 无符号右移
and 按位与
or 按位或
xor 按位异或
inv() 按位非
== 等于
!= 不等于
< > <= >= 小于 大于 小于等于 大于等于
a..b 区间
x in a..b 在区间内
x !in a..b 不在区间内
【6】字符类型
val c : Char = 'c'
kotlin的字符类型是 Char。
【7】布尔类型
val b : Boolean = true
【8】字符串
val s : String = "S"
四、控制流
kotlin的控制流有:if、when、for、while
【1】if 表达式
kotlin中,if是一个表达式,并非是一个关键字
// if
var max = a
if (a < b) max = b
// if else
var max: Int
if (a > b) {
max = a
} else {
max = b
}
fun largerNumber(num1: Int, num2: Int): Int {
var value = 0
if (num1 > num2) {
value = num1
} else {
value = num2
}
return value
}
if 有返回值,可以写成:
fun largerNumber(num1: Int, num2: Int): Int {
val value = if (num1 > num2) {
num1
} else {
num2
}
return value
}
可以直接 return
fun largerNumber(num1: Int, num2: Int): Int {
return if (num1 > num2) {
num1
} else {
num2
}
}
去除大括号
fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) {
num1
} else {
num2
}
当 if 里面只有一句代码时,可以省略大括号
fun largerNumber(num1: Int, num2: Int)
= if (num1 > num2) num1 else num2
【2】when
当 if...else... 太多时,可以考虑使用 when 语句,相当于 Java 的 switch 语句
fun getScore(name: String) = when (name) {
"Tom" -> 86
"Jim" -> 87
"Jack" -> 88
"Lily" -> 89
else -> 0
}
when还可以检查数据类型,结合 is 使用
fun checkNumber(num: Number) {
when (num) {
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("number not support")
}
}
is 相当于 Java 的 instanceof
if(num is Int) {}
【3】for 循环
for (i in 0..10) { // 闭区间
println(i)
}
for (i in 0 until 10) { // 左开右闭
println(i)
}
for (i in 0 until 10 step 2) { // step 相当于 i = i + 2
println(i)
}
in:在什么范围内
!in:不在什么范围内
区间的表示?
闭区间:
val range = 0..10 // 升序
val range : IntRange = 0..10 // 升序
val range = 10 downTo 0 // 降序
左闭右开:
val range = 0 until 10 // 升序
【4】while
while (x > 0) {
}
do {
} while (y != null)
标签:入门,num2,Int,kotlin,类型,val,println,num1
From: https://blog.51cto.com/u_11099047/8789480