Kotlin入门简单教程
Hello Kotlin
IDE我选择的是idea (不要问我为什么)
新建工程选择Kotlin就可以了
新建向导
创建完成的目录结构
工程结构
新建一个Kotlin文件(文件名不用跟 .kt)
Hello Kotlin代码
fun main(args: Array<String>) { println("Hello Kotlin.") }
点击左侧的Kotlin图标运行
Hello Kotlin就算是走完了~~ 这里还有一些东西要提出来
- println这个究竟是个什么函数(Ctrl + 鼠标左键)
println源码
- println这个究竟是个什么函数(Ctrl + 鼠标左键)
$%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面高能预警~~ 各种官网语法例子在路上
======================> 传送门
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%
入门
1.包名
- 这里的包名可以不用和文件的路径对应(包名可以随意而不用管这个源文件的路径)
- Kotlin里面的包名(这个和java的语法一样)
package my.demo import java.util.*
这里修改上面的Hello Kotlin代码(加入包名的定义 )
package com.SUSE.dapi fun main(args: Array<String>) { println("Hello Kotlin.") }
我们去看看 out文件夹(可以看到编译之后的class文件其实是和文件夹对应起来了的)
我们修改刚才那个文件的包名再试试
修改包名
编译之后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的子类哈)
Number源码
字符(字符不能直接和数据比较,但是Char也有 toInt之类的方法)
var mChar: Char = 'P' mChar == 1 // 错误 mChar == 'a' mChar.toByte() mChar.toInt()
虽然字符也有toInt方法,但是字符并不是Number的子类哈
Char的部分源码
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])
arrayOf源码
系统还提供了一个函数 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(偷哈懒 ~~)