val a = 1..100
val b = 1 until 100
val c = 1.rangeTo(100)
val d = IntRange(1, 100)
val a1 = 1L..100L
val b1 = 1L until 100L
val c1 = 1L.rangeTo(100L)
val d1 = LongRange(1L, 100L)
val a2 = 'a'..'b'
val b2 = 'a' until 'b'
val c2 = 'a'.rangeTo('b')
val d2 = CharRange('a', 'b')
val aa='你'..'我'
val a=1.rangeTo(10)
println(a.first)
println(a.last)
val a = 20..30
for (i in a) {
println(i)
for (i in a) {
println(i)
for ((i, withIndex) in a.withIndex()) {
println("$i-----$withIndex")
a.forEach {
println(it)
a.forEachIndexed { index, i ->
println("$index-----$i")
val s=10 downTo 1
s.forEach {
println(it)
val a=1..10
val reversed = a.reversed()
reversed.forEach {
println(it)
val a=1..10 step 4
for (i in a) {
println(i)
val arrayOf = arrayOf("1", "N", "0", "Y")
var arrayOf1 = arrayOf(1, 2, 3)
var arrayOf2 = arrayOf("1", 2, 'a')
val s0 = IntArray(10)
val s1 = IntArray(10) {
1
val a= arrayOf("1","A","B")
println(a.joinToString())
println(a.joinToString(separator = "、",prefix = "[",postfix = "]"))
println(a.joinToString(""))
val a = arrayOf("你", "我", "他")
for (s in a) {
println(s)
for ((index, s) in a.withIndex()) {
println("$index----$s")
a.forEach {
println(it)
a.forEachIndexed { index, s ->
println("$index----$s")
val s = arrayOf(100, 102, 104)
s[0] = 121
s.set(1, 110)
s.forEach{
println(it)
val a = arrayOf("张三", "李四", "王五", "李四", "赵六")
println(a.indexOf("李四"))
println(a.lastIndexOf("李四"))
val index = a.indexOfFirst {
it.startsWith("李")
println(index)
val index2 = a.indexOfLast {
it=="李四"
println(index2)
val b= intArrayOf(5,2,0,1,3,1)
val slice = b.slice(2..5)
println(slice)
val sliceArray = b.sliceArray(2..5)
println(sliceArray.joinToString())
val array = Array(2) { IntArray(2) }
array[0][0]=1
array[0][1]=2
for ((i,ints) in array.withIndex()) {
for ((j,int) in ints.withIndex()) {
println("i=$i,j=$j,int=$int")
val arrB = Array(3){Array(3){IntArray(3)}}
arrB[0][0][0]=1
arrB[0][0][1]=2
for (one in arrB) {
for (two in one) {
for (three in two) {
println(three)
fun sayHello() {
println("hello")
fun sayHello(name: String) {
println("hello " + name)
fun getLength(name: String): Int {
return name.length
fun getHello(): String {
return "hello"
Kotlin中的顶层函数反编译成的Java中的容器类名一般是顶层文件名+“Kt”后缀作为类名,但是也是可以自定义的。也就是说顶层文件名和生成容器类名没有必然的联系。通过Kotlin中的@file: JvmName(“自定义生成类名”)注解就可以自动生成对应Java调用类名,注意需要放在文件顶部,在package声明的前面
@file: JvmName("Util")
package com.zp.kotlin
fun helloWord() {
fun main(args: Array<String>) {
fun hello() {
println("hello")
hello()
println(add(1, 1))
println(add2(1, 1))
println(add3(1, 1))
fun add(m: Int, n: Int): Int {
return m + n
fun add2(m: Int, n: Int): Int = m + n
fun add3(m: Int, n: Int) = m + n
val a = ::add5
println(a(1, 1))
println(a?.invoke(1, 1))
val b: (Int, Int) -> Int = { m, n -> m + n }匿名函数
println(b(1, 1))
fun add5(m: Int, n: Int): Int {
return m + n
sendRequest("http://www.baidu.com")
sendRequest("http://www.baidu.com", "POST")
sendRequest(method = "FILE", path = "http://www.baidu.com")
fun sendRequest(path: String, method: String = "GET") {
println("发送请求路径$path,请求方式$method")
val adds = adds(1, 2, 3)
println(adds)
fun adds(vararg a: Int): Int {
var s = 0
a.forEach {
s += it
return s
val arrayOf = arrayOf("a", "bb", "ccc")
test(*arrayOf)
fun test(vararg a:String){
println(a.toList())
val a = 10
val b = 0
var c: Int = 0
try {
c = a / b
} catch (e: Exception) {
println("捕获到异常")
} finally {
println("最终要执行的代码")
println(c)
* koltin编译时异常
* kotlin不检查编译时异常,kotlin认为大部分的编译时异常都是没有必要的
val file = File("/1.txt")
val f = BufferedReader(FileReader(file))
val a: Int? = try {
"abc".toInt()
} catch (e: Exception) {
println(a)
val a = 4
println("$a 的阶乘是${fact(a)}")
println("第$a 个斐波那契数列是${fibonacci(a)}")
* 求n的阶乘
* 分析:n的阶乘 = n *(n-1)的阶乘 ,1的阶乘是1
fun fact(n: Int): Int {
if (n == 1) {
return 1
} else {
return n * fact(n - 1)
* 求n个斐波那契数列(1 1 2 3 5 8 13 21 34 55……)
* 分析:第n个斐波那契数列=第n-1个斐波那契数列+第n-2个斐波那契数列,第1个斐波那契数列是1,第2个斐波那契数列是1
fun fibonacci(n: Int): Int {
if (n == 1 || n == 2) {
return 1
} else {
return fibonacci(n - 1) + fibonacci(n - 2)
* 常见的需求:通过迭代和递归都可以解决 复杂的问题用递归更容易实现
* StackOverflowError 递归如果递归的层级比较深容易栈内存溢出
* 递归:优点:逻辑比较简单 容易实现 缺点:容易栈内存溢出(内存开销比较大)
* 迭代:优点:内存开销小 缺点:抽象出数学模型
val n = 5
println("1到$n 的和为${sum1(n)}")
println("1到$n 的和为${sum2(n)}")
* 递归方法求和
* 求1+2+……+n的和
* 分析:1到n的和 = n+ 1到(n-1)的和 1到1的和=1
fun sum1(n: Int): Int {
if (n == 1) {
return 1
} else {
return n + sum1(n - 1)
* 迭代方法求和
* 求1+2+……+n的和
fun sum2(n: Int): Int {
var newN = n
var s = 0
while (newN > 0) {
s += newN
newN--
return s
* 尾递归:调用了自身之后没有其他操作
* 只有是尾递归才可以做尾递归优化
val n = 5
println("1到$n 的和为${sum3(n)}")
println("1到$n 的和为${sum4(n)}")
* 原始递归求和
* 求1+2+……+n的和
* 分析:1到n的和 = n+ 1到(n-1)的和 1到1的和=1
fun sum3(n: Int, result: Int = 0): Int {
if (n == 1) {
return 1
} else {
return sum3(n - 1) + n
* 尾递归优化求和
* 求1+2+……+n的和
* 尾递归优化步骤:
* 第一步:需要将递归转换为尾递归
* 第二步:加上tailrec
* 尾递归优化的原理:将递归转换为迭代(while循环)
tailrec fun sum4(n: Int, result: Int = 0): Int {
if (n == 1) {
return result + 1
} else {
return sum4(n - 1, result + n)