Hello Kotlin
-
IDE我选择的是idea (不要问我为什么)
-
新建工程选择Kotlin就可以了
-
创建完成的目录结构
-
新建一个Kotlin文件(文件名不用跟 .kt)
-
Hello Kotlin代码
fun main(args: Array<String>) { println("Hello Kotlin.") }
-
点击左侧的Kotlin图标运行
-
Hello Kotlin就算是走完了~~ 这里还有一些东西要提出来
- println这个究竟是个什么函数(Ctrl + 鼠标左键)
- println这个究竟是个什么函数(Ctrl + 鼠标左键)
$%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面高能预警~~ 各种官网语法例子在路上
======================> 传送门
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%
入门
1.包名
- 这里的包名可以不用和文件的路径对应(包名可以随意而不用管这个源文件的路径)
- Kotlin里面的包名(这个和java的语法一样)
package my.demo import java.util.*
-
这里修改上面的Hello Kotlin代码(加入包名的定义 )
package com..dapi fun main(args: Array<String>) { println("Hello Kotlin.") }
-
我们去看看 out文件夹(可以看到编译之后的class文件其实是和文件夹对应起来了的)
-
我们修改刚才那个文件的包名再试试
- 默认导入的包
kotlin.
kotlin.annotation.
kotlin.collections.
kotlin.comparisons. (since 1.1)
kotlin.io.
kotlin.ranges.
kotlin.sequences.
kotlin.text.
java.lang.*
kotlin.jvm.*
2.基本数据类型(这里需要注意哈~~ kotlin中所有的都是对象包括int之类的基本类型,so这里说的基本类型其实也是对象哈)
- Double类型 (64位)
- Float 类型(32位)
- Long类型(64位)
- Int(32位)
- Short类型(16位)
- Byte类型(8位)
package com.suse.dapi.demo
fun main(args: Array<String>) {
println("Hello Kotlin.")
val mDouble: Double = 12345.0
val mFloat: Float = 12323f
var mLong: Long = 123
var mInt: Int = 1232
var mInt2 = 123213 //省略了变量类型
mDouble = 123.0 //尝试修改 val 申明的变量
mLong = 12323
mInt = mDouble.toInt() // double ==> int
mLong = mInt.toLong() // int ==> long
}
-
这里引入了变量的定义
- 变量使用var 或者 val来申明(区别是val是只读变量,var是可变变量)
- 变量使用:来申明类型,类型申明也可以省略~ 这就由系统来推断是什么类型
- 变量还有好些需要注意的地方后面遇到了在提哈
-
这里还有一个类型转换的方法(每个类型都有,只要是Number类的子类都可以使用,上面提到的基本类型都是Number的子类哈)
-
字符(字符不能直接和数据比较,但是Char也有 toInt之类的方法)
var mChar: Char = 'P' mChar == 1 // 错误 mChar == 'a' mChar.toByte() mChar.toInt()
-
虽然字符也有toInt方法,但是字符并不是Number的子类哈
-
Boolean 布尔类型 ,这个的值有两个 true false
-
数组类型 Array(系统库提供了一个arrayOf的方法可以创建 Array数组)
var intArray = arrayOf(1,2,3) //这里返回的实际上是Array对象 println(intArray[0]) var intArray: Array<Int> = arrayOf(1,2,3) println(intArray[0])
-
系统还提供了一个函数 arrayListOf(实际上就是返回的java里面的ArrayList)
-
字符串类型String
var name: String = "dapi" var number = "123345666"
- 字符串还有两个有趣的语法(和PHP的字符串类似 ,直接看例子吧)
var content = """
这里面可以写各种东西
var name = "" .....
这个就类似 html 里面的 <pre></pre>标签
$name ====> ${'$'} // 这个是在字符串里面输出 $
"""
var templ = "i am $name, my number is ${ name + number}" //字符串模板
- 模板里面的 ${} 或者 $变量名 这个就是一个表达式,${}里面还可以调用函数
3.流程控制
- 条件语句 if(if可以是一个表��式,也可以有返回值)
var number1 = 0x0033
var number2 = 0x0022
var flag: Boolean = false
// 一般的 if
if(number1 > number2){
flag = true
}else{
flag = false
}
// 有返回值的 if
flag = if (number1 > number2){
println(".....")
true // 吧返回值放到最后就可以了
}else{
println("-----")
false
}
// 表达式的 if
flag = if (number1 > number2) true else false
- 循环语句 for while do..while
-
for
/** * * 以前的 for (int i = 0;i < 10;i++) 循环已经不行了 * for 专门用来迭代 有 iterator 方法的集合 * */ var numbers = arrayOf(1,2,3,4,5) for (item in numbers){ //.. } for (item in numbers.iterator()){ //.. } /** * * 这里是的index 是下标 0 ,1 ,2, 3, 4,... * 查看源码发现 indices 其实返回的就是一个数组 Array 实际上也是使用的 iterator * */ for (index in numbers.indices){ // .. } /** * 这里 (index,value) 其实就是下标 和 对应的值 * 查看源码发现 withIndex 其实返回的就是一个数组 Array 实际上也是使用的 iterator * */ for((index,value) in numbers.withIndex()){ // ... }
- 所以for循环就是专门用来迭代 iterator 的 ,只要 in 的右边返回的是一个包含iterator(): Iterator<T>方法的对象(或者是直接是一个Iterator对象)就可以了
-
while(偷哈懒 ~~)
while (x > 0) {
x--
}
do {
val y = retrieveData()
} while (y != null) // y is visible here!
- when语句(这个就和以前的 switch类似 , switch 和 if 的结合)
var number3 = 100
when(number3){
in 1..101 -> println("1")
in 10..102 -> println("2")
else -> println("3")
}
// 结果是 3
when{
number3 in 1..102 -> {
//...
}
number3 == 100 -> {
//...
}
else -> {
//...
}
}
- break 和 continue (这个就是多了一个标签的情况)
while(number3 < 200){
if(number3 % 2 == 0){
continue
}
if(number3 == 150){
break
}
number3++
}
//添加标签的情况
tagert@
while(number3 < 200){
while(number3 < 150){
break@tagert
}
number3++
}