Kotlin学习

1.环境配置

eclipse安装kotlin插件地址http://marketplace.eclipse.org/content/kotlin-p;ugin-eclipse

2.Hello World

// 变量的声明和使用
fun main(args: Array<String>) {
    var name = "张三";
    println(name);
}

3.常见数据类型

 

4.变量和常量声明

fun main(args: Array<String>){
    var i:Byte = 125;
    val number = "No123456"; // 用val声明常量不可修改
}

5.kotlin命令行交互式终端

5.1安装kotlin-command-line

https://github.com/JetBrains/kotlin/releases

5.2配置环境变量

5.3命令行输入

kotlinc

:quit 退出命令行

6.函数编写规则

fun plus(a:Int, b:Int) :Int{
    return a+b;
}

7.字符串占位符

fun diaryGenerater(placeName:String):String {
    var temple = "字符串模板${placeName} ${placeName.length}";
    return temple;
}

8.空值处理

// 加?表示该值可以为空
fun heat(str:String?):String {
    return "热" + str;
}
​
fun main(args:Array<String>){
    var mess = heat("gou");
    println(mess);
}

9.when表达式

// when表达式
fun gradeStudent(score:Int) {
    when (score) {
        10 -> println("考了满分")
        9 -> println("干的不错")
        else -> println("=====")
    }
}
fun numToChinese(num:Int):String{
    var result = when(num){
        1 -> "一"
        2 -> "二"
        3 -> "三" 
        4 -> "四"
        else -> "===="
    }
    return result;
}

 

10.区间

// 区间
// 开区间(a,b)
​
fun main(args: Array<String>) {
    // 区间
    var nums = 1 .. 100 // [1,100] 闭区间
    for (num in nums) {
        //println(num)
    }
    var nums1 = 1 until 100 // [1,100) 前闭后开区间
    for (num in nums1) {
        //println(num);
    }
    var nums3 = 1 .. 16
    for (a in nums3 step 2) {
        //println(a);
    }
​
    var nums4 = nums3.reversed();
    for (a in nums4) {
        println(a);
    }
}

 

11.List Map

fun main(args: Array<String>) {
    var lists = listOf("一","二","三","四")
    for (list in lists) {
        println(list)
    }
    // 按位打印
    for ((i,e) in lists.withIndex()) {
        println("$i,$e")
    }
}
import java.util.TreeMap
​
fun main(args: Array<String>) {
    var map = TreeMap<String,String>()
    map["好"] = "good"
    map["学习"] = "study";
    println(map["好"]);
}

 

12.函数和函数表达式

// 函数和函数表达式
fun main(args:Array<String>) {
    var result = add1(3,5)
    println(result);
    var i = {x:Int, y:Int -> x+y} // 函数表达式
    var result2 = i(3,5)
    println(result2)
​
    var j:(Int,Int) ->Int = {x,y -> x+y} // 函数表达式另一种写法
    var result3 = j(3,5)
    println(result3);
​
}
​
fun add(x:Int,y:Int):Int{ // 普通函数写法
    return x+y
}
​
fun add1(x:Int,y:Int):Int = x+y // 简写

13.默认参数和具名参数

// 默认参数和具名参数
val Pi = 3.14f
fun getRectArea(width:Int,height:Int):Int{
    return width * height
}
fun getCircleLength(PI:Float = Pi,radius:Float):Float{ // 给参数Pi一个默认值
    return 2*PI*radius
}
​
fun main(args:Array<String>) {
     var area = getCircleLength(radius = 2.1f) // 具名参数
    println(area)
}

14.数字字符串相互转换

// 数字字符串相互转换
fun main(args:Array<String>) {
    var a = "13"
    var b = 13
    a = b.toString() // 数字转字符串
    b = a.toInt(); // 字符串转数字
}

15.人机交互

// 人机交互
fun main(args:Array<String>) {
    while(true){
        println("请输入一个数字:")
        var num1str = readLine()
        println("请输入第二个数字:")
        var num2str = readLine()
        try {
            var num1:Int = num1str!!.toInt() //确保输入的数字一定不为空
            var num2:Int = num2str!!.toInt()
            println("${num1} + ${num2} = ${num1+num2}")
        }catch (e:Exception){
            println("请输入数字")
        }
    }
}

16.递归

import java.math.BigInteger
// 递归
fun fact(num:BigInteger):BigInteger{
    return if (num ==BigInteger.ONE) BigInteger.ONE
    else num*fact(num- BigInteger.ONE)
}
fun main(args:Array<String>) {
    var num = BigInteger("100"); // 计算阶乘
    println(fact(num))
}
​
// 尾递归优化
tailrec fun allAdd(num:Int,result: Int):Int{
    return if(num ==0) {
        1
    } else {
        num + allAdd(num -1,result)
    }
}
​
fun main(args:Array<String>){
    var num = 100000
    var result = 0
    println(allAdd(num -1,result + num))
}

17.class

// 面向对象
class Rect(var height:Int,var width:Int)

fun main() {
    var rect01 = Rect(20,20)
    println("矩形的宽度:${rect01.width}")
    println("矩形的高度:${rect01.height}")
}

18.open定义继承和重写

package extend

open class Father {
    var chactor:String = "性格内向"
    open fun action(){
        println("+++++")
    }
}
package extend

class Son :Father() {
    override fun action() {
        println("===========");
    }
}

19.abstract定义抽象类和方法

package extend

abstract class Human(var name:String) {
    abstract fun eat()
}
package extend

class Man(name:String):Human(name) {
    override fun eat() {
        println("${name}+++++")
    }

}
package extend

class Woman(name:String) :Human(name) {
    override fun eat() {
        println("-----")
    }
}

20.interface定义接口

package extend

interface IMan {
    fun hunmanF1()
}
package extend

class Man1:IMan {
    override fun hunmanF1() {
        println("===========");
    }
}

21.by委托代理

package agent

interface IWashBowl {
    fun washing()
}
package agent

class BigHeadSon:IWashBowl {
    override fun washing() {
        println("=====");
    }

}
package agent

class SmallHeadFather:IWashBowl by BigHeadSon(){
    override fun washing() {
        println("我是大头爸爸");
        BigHeadSon().washing();
        println("========");
    }
}

22.Object声明单例模式

package agent

object BigHeadSon:IWashBowl {
    override fun washing() {
        println("=====");
    }

}
package agent

class SmallHeadFather:IWashBowl by BigHeadSon{
    override fun washing() {
        println("我是大头爸爸");
        BigHeadSon.washing();
        println("========");
    }
}

23.印章类sealed class

指定有限类型class

sealed class Son {
    fun sayHello(){
        println("大家好")
    }
    class donkey:Son()
    class mule:Son()
}
fun main() {
    var s1 = Son.donkey();
    var s2 = Son.mule();
}

 

posted @ 2021-07-23 17:46  yiwenzhang  阅读(87)  评论(0编辑  收藏  举报