Kotlin 基础

基本语法,类,接口,继承,内部类

使用if

fun if1() {

    //判断
    // 传统用法
  var a = 7
  var b = 3
 var max = a
  if (a < b) max = b
 print("max"+max+"a"+a+"b"+b)

使用 else

var max: Int
 if (a > b) {
max = a
} else {
  max = b
   }

作为表达式

val max = if (a > b) a else b

我们也可以把IF表达式的结果赋值给一个变量。

  val max = if (a > b) {
      print("Choose a")
     a
 } else {
     print("Choose b")
      b
   }
  print(max)

if

    var x = 0
    if (x > 0) {
        println("x 大于 0")
    } else if (x == 0) {
        println("x 等于 0")
    } else {
        println("x 小于 0")
    }

    var a = 1
    var b = 2
    val c = if (a >= b) a else b
    println("c 的值为 $c")

使用 in 运算符来检测某个数字是否在指定区间内,区间格式为 x..y :

    val x1 = 5
    val y = 9
    if (x1 in 1..8) {
        println("x1 在区间内")
    }
}

数组

/**
 * 可变参数会在函数体中,自动转变为数组类型
 * 数组类型不能作为参数,直接传递给可变参
 * 在数组类型前面添加 * ,可以传递给可变参数
 *
 */
fun main() {
    foo("1", "2", "3")
}

fun foo(vararg args: String) {
    bar1(*args)
    if2(args)
}

fun bar1(vararg args: String) {
    println(args.contentToString())
}

fun if2(args: Array<out String>) {
    bar1(*args)

    //赋值
    //[1,2,3]
    val a = arrayOf(1, 2, 3)

    //赋值
    //[0,2,4]
    val b = Array(3, { i -> (i * 2) })

    //读取数组内容
    println(a[0])    // 输出结果:1
    println(b[1])    // 输出结果:2

    val x: IntArray = intArrayOf(1, 2, 3)
    x[0] = x[1] + x[2]
}

switch == when

 //条件必须是一个常量
    var x: Int
    x = 4
    when (x) {
        1 -> print("x == 1")
        2 -> print("x == 2")
        else -> { // 注意这个块
            print("x 不是 1 ,也不是 2")
        }
    }

    //在 when 中,else 同 switch 的 default。如果其他分支都不满足条件将会求值 else 分支。
    when (x) {
        0, 1 -> print("x == 0 or x == 1")
        else -> print("otherwise")
    }

    //我们也可以检测一个值在(in)或者不在(!in)一个区间或者集合中
    when (x) {
        in 1..10 -> print("x 在该区间范围内")
    //  in validNumbers -> print("x is valid")
        //加 ! 是非
        !in 10..20 -> print("x is outside the range")
        else -> print("none of the above")
    }

when 中使用 in 运算符来判断集合内是否包含某实例

    val items = setOf("apple", "banana", "kiwi")
        when {
            "orange" in items -> println("juicy")
            "apple" in items -> println("apple is fine too")
        }

可变参数

    var name = "hello world"
    print(name)

lambda函数(匿名函数) 参数格式为:参数 : 类型

    //定义一个sum函数     a b 表示变量
    //val   定义常量和变量     不可更改    类似final
    val sum: (Int, Int) -> Int = { a, b -> a + b }
    // int a;   int b;     a+b=1+2
    print(sum(1, 2));    //输出3

外部类

    Green("" + sum(1, 2)).grn()

var 定义一个可变的变量

    var c: Int

可以根据值反推回去是什么类型 弱类型语言(可以不用给他类型)

    var b = 1.0

字符串的脚本语言用法

    //  $ 表示一个变量名或者变量值
    //  $varName 表示变量值
    //  ${varName.fun()} 表示变量的方法返回值
    //TODO   第一种方式
    var a = 1   //可变参数
    //这种写法  字符串在内存里面单独存储  开辟了一个新的存储空间 存储方式和常量是一样的
    val s1 = "a is $a"      //模板中的简单名称  字符串模板
    //TODO   第二种方式
    a = 2
    //                          is替换成was
    val s2 = "${s1.replace("is", "was")}, but now is $a"
    print(s2)

类型后面加?表示可为空

    var age: String? = "23"
    // !!.  抛出空指针异常
    val ages = age!!.toInt()
    // ?.  不做处理返回 null
    val ages1 = age?.toInt()
    //age为空返回-1
    val ages2 = age?.toInt() ?: -1
    /**
     * 参数可以为空,不用传参数的值
     * 声明一个字符串变量
     * 加了一个 ? 表示这个值可以出现为空的情况
     * TODO 第一种
     * 调用的时候在后面加上   !!  抛出空指针异常
     * TODO 第二种
     * ?. 后面不做处理     返回null
     * TODO 第三种
     * ?:-1    没有值的情况下、为空返回-1
     */

区间 类型的判断

    //循环1-4     1..4   .. 区间---递增的
    for (i in 1..4) print(i) // 输出“1234”
    //步长
    // 使用 step 指定步长
    //如果每次输出不是++    是+2/+3..    i每一次执行加多少
    for (i in 1..4 step 2) print(i) // 输出“13”
    //倒着输出  downTo  4 3 2 1     step  步长  一次-2
    for (i in 4 downTo 1 step 2) print(i) // 输出“42”
    // 使用 until 函数排除结束元素
    //排除元素  until  不能包含10   包前不包后
    for (i in 1 until 10) {   // i in [1, 10) 排除了 10
        println(i)
    }

位操作符

//        shl(bits) – 左移位 (Java’s <<)
//        shr(bits) – 右移位 (Java’s >>)
//        ushr(bits) – 无符号右移位 (Java’s >>>)
//        and(bits) – 与
//        or(bits) – 或
//        xor(bits) – 异或
//        inv() – 反向

forEach

    var arr = arrayOf(1, 2, 3, 4)
    arr.forEach {
        var e = it;
        print(e);
    }

//外部类

class Green(var name: String) {
    fun grn() {
        Log.e("TAG", "grn:$name")// 成员函数
    }
}

类型检测和类型转换 Any 任意类型(任何) ? 返回值可能为空

 fun getStringLength(obj: Any): Int? {
        // is   表示是一个字符串就执行这个   不是就执行其他的
        if (obj is String) {
            // 做过类型判断以后,obj会被系统自动转换为String类型
            return obj.length
        }

        // !is  不是这个类型就执行这句话
        //在这里还有一种方法,与Java中instanceof不同,使用!is
        // if (obj !is String){
        //   // XXX
        // }

        // 这里的obj仍然是Any类型的引用
        return null
}

//基本类型 和 java一样

//比较两个值是否相等
fun main1(args: Array<String>) {
    val a: Int = 10000
    println(a === a) // true,值相等,对象地址相等

    //经过了装箱,创建了两个不同的对象
    val boxedA: Int? = a
    val anotherBoxedA: Int? = a

    //虽然经过了装箱,但是值是相等的,都是10000
    println(boxedA === anotherBoxedA) //  false,值相等,对象地址不一样
    println(boxedA == anotherBoxedA) // true,值相等
}

字符串模板

//字符串可以包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美元符($)开头,由一个简单的名字构成:
fun main2(args: Array<String>) {
    val i = 10
    val s = "i = $i" // 求值结果为 "i = 10"
    println(s)
}

用花括号扩起来的任意表达式:

fun main3(args: Array<String>) {
    val s = "runoob"
    val str = "$s.length is ${s.length}" // 求值结果为 "runoob.length is 6"
    println(str)
}

原生字符串和转义字符串内部都支持模板。 如果你需要在原生字符串中表示字面值 $ 字符(它 不支持反斜杠转义)

fun main4(args: Array<String>) {
    val price = """
${'$'}9.99
"""
    println(price)  // 求值结果为 $9.99
}

kotlin recycle列表

recycle.layoutManager = GridLayoutManager(this, 2)

    //todo  数据源
    var list = arrayListOf<String>()
    for (i in 0..10) {
        list.add("爱好$i")
    }
    var kotlinadapter = KotlinAdapter(list, this)
    recycle.adapter = kotlinadapter

    kotlinadapter.setOncli(object : KotlinCallback {
        override fun onClick(pos: Int) {
            Toast.makeText(this@MainActivity, list.get(pos), Toast.LENGTH_SHORT).show()
        }
    })

kotlin 适配器

class KotlinAdapter(private val list: List<String>, private val mContext: Context) :
    RecyclerView.Adapter<KotlinAdapter.ViewHolder>() {


//todo  接口回调
private var KotlinCallback: KotlinCallback? = null
fun setOncli(KotlinCallback: KotlinCallback) {
    this.KotlinCallback = KotlinCallback
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): KotlinAdapter.ViewHolder {
    val view: View = LayoutInflater.from(mContext).inflate(R.layout.kotlin_item_layout, null)
    return ViewHolder(view)
}

override fun getItemCount(): Int {
    return list.size
}

override fun onBindViewHolder(holder: KotlinAdapter.ViewHolder, position: Int) {
    with(holder?.itemView!!) {
        tv_text.text = list.get(position)
    }
    holder.itemView.setOnClickListener { KotlinCallback!!.onClick(position) }
}

class ViewHolder(item: View) : RecyclerView.ViewHolder(item)

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容