学习Kotlin语言之数据类型、变量、数组、列表、循环、函数、条件

  Kotlin是不同于Java的一门新语言,它具有自己独特的语法规则。分下面几步进行阐释:


基本数据类型

  Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型。


变量&常量

  Kotlin中不再要求在声明变量时对数据类型进行确定,统一使用变量或常量方式声明。

  • 变量分为两类,分别是val 关键字修饰和 var关键字修饰。
      - val x = 1,表明变量x不可修改,长度不可变。
      - var x = 1,表明变量x可修改,长度可变。即,可以进行重新赋值。
  • 常量需要用const 关键字修饰进行声明,不可修改和改变长度。
      - private const val y = 3

数组

  • arrayOf()方式创建数组
    [1,2,3]
    val a = arrayOf(1, 2, 3)
  • 工厂模式创建数组
    [0,2,4]
    val b = Array(3) { i -> (i * 2) }

List

  • 创建空列表
    val emptyList = emptyList<String>()
  • 创建普通列表
    val list = listOf<String>("aaa","bbb","ccc")
  • 创建可修改的列表
    val mutList = mutableListOf<String>("111","222","333")
    mutList[1] = "修改"
  • 创建含对象列表
    val arrayList: ArrayList<Fruit> ?= ArrayList()
    arrayList?.add(0,Fruit("苹果",1))
    arrayList?.add(1,Fruit("梨",2))
    Log.i(TAG,""+arrayList?.get(0)?.name) //Kotlin打印: 苹果
    //值得注意的是,在Kotlin中创建实体类变得无比简洁:
    //class Fruit(val name:String, val imageId:Int) //省略了get和set方法。可以直接通过"对象.属性"拿到值,这是Kotlin内部做好封装的。

特殊语法

  • “:”——继承
    x:y表明x的父类为y,x继承自y,是y的子类。
  • “?”——非null执行
    arrayList?.add()表明当arrayList不为null时执行add操作。因为Kotlin语言的一大特性:几乎杜绝了空指针这个全球崩溃率最高的异常,因此这个“?”的作用无比关键,会经常使用。
    Tips:Kotlin语言不再使用分号作为语句的结尾。更加简洁了有没有!

循环语句

主要为for循环

  • 循环区间
    for (i in 1..9)
  • 循环+步长
    for (i in 1..9 step 2) //顺序,步长为2
  • 循环+downTo倒序
    for (i in 4 downTo 1 step 2) //倒序,步长为2
  • 循环+until排除
    for (i in 1 until 4) //1-4 排除掉4

条件语句

  Kotlin中推荐使用when语句进行条件甄别,但也能使用if……else。原因无它,Kotlin继承了Java的很多财富。

  • 单条件分支
        val x = 3
        when (x) {
            1 ->Log.i(TAG,"x = 1")
            2 ->Log.i(TAG,"x = 2 ")
            else -> { // 注意这个块
                Log.i(TAG,"x 不是 1 ,也不是 2")
            }
        }
  • 多条件分支
    // 1,2 -> Log.i(TAG,"x = 1 或者2 ") (多分支条件写法)

函数声明

  • 使用关键字fun,意为function函数。
    举例(求和函数):private fun sum(a: Int, b: Int): Int = a + b

类型转换

  • toByte(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char

位操作符

  • and(bits) – 与
  • or(bits) – 或
  • !– 非

代码示例:

private const val TAG = "Kotlin打印"
private const val c = 3
@Route(path="/main/kotlin03_activity") //ARouter库的注解,用来处理Activity之间的跳转
class Kotlin03 : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_kotlin03)
        //变量
        variable()
        //函数
        Log.i(TAG,"${sum(2,3)}") //Kotlin打印: 5
        //循环
        repeatExample()
        //数组
        arrayExample()
        //字符串
        stringExample()
        //List
        listExample()
        //when条件语句,代替了Java中的if...else语句(但也能用,因为Kotlin完全继承了Java的财富)
        whenExample()
    }
    
    //变量
    private fun variable(){
        //1、不可变
        val a = 1
        Log.i(TAG,"a = $a") //Kotlin打印: a = 1
        //2、可变
        var b = 1
        b = 2 //重新对b赋值
        Log.i(TAG,"b = $b") //Kotlin打印: b = 2
        //3、常量
//        private const val c = 3 //class之外声明+定义
        Log.i(TAG,"c = $c") //Kotlin打印: c = 3
    }

    //函数,示例:求和
    private fun sum(a: Int, b: Int): Int = a + b

    //循环
    private fun repeatExample() {
        //循环区间输出
        for (i in 1..9)
        Log.i(TAG,"$i") //Kotlin打印: 1,2,3,4,5,6,7,8,9
        //设置步长
        for (i in 1..9 step 2) //顺序,步长为2
        Log.i(TAG,"$i") //Kotlin打印: 1,3,5,7,9
        //使用downTo倒序
        for (i in 4 downTo 1 step 2) //倒序,步长为2
        Log.i(TAG,"$i") //Kotlin打印: 4,2
        //使用until排除
        for (i in 1 until 4) //1-4 排除掉4
        Log.i(TAG,"$i") //Kotlin打印: 1,2,3
    }

    //数组
    private fun arrayExample() {
        //[1,2,3] 第一种创建方式:使用arrayOf()
        val a = arrayOf(1, 2, 3)
        Log.i(TAG,"${a[0]}") //Kotlin打印: 1
        //[0,2,4] 第二种创建方式:工厂模式
        val b = Array(3) { i -> (i * 2) }
        Log.i(TAG,"${b[1]}") //Kotlin打印: 2
    }

    //字符串
    private fun stringExample() {
        //简单输出字符串,$变量名
        val i = 10
        val s = "i = $i"
        Log.i(TAG,"$s") //Kotlin打印: i = 10
        //花括号任意表达式
        val t = "runoob"
        val str = "$t.length is ${t.length}"
        Log.i(TAG,"$str") //Kotlin打印: runoob.length is 6
    }

    //List列表
    private fun listExample(){
        //1、创建空列表
        val emptyList = emptyList<String>()
        Log.i(TAG,""+emptyList) //Kotlin打印: []
        //2、创建普通列表
        val list = listOf<String>("aaa","bbb","ccc")
        Log.i(TAG,""+list) //Kotlin打印: [aaa, bbb, ccc]
        //3、创建可修改的列表
        val mutList = mutableListOf<String>("111","222","333")
        mutList[1] = "修改"
        Log.i(TAG,""+mutList) //Kotlin打印: [111, 修改, 333]
        //4、创建对象列表
        val arrayList: ArrayList<Fruit> ?= ArrayList()
        arrayList?.add(0,Fruit("苹果",1))
        arrayList?.add(1,Fruit("梨",2))
        Log.i(TAG,""+arrayList?.get(0)?.name) //Kotlin打印: 苹果
        //值得注意的是,在Kotlin中创建实体类变得无比简洁:
        //class Fruit(val name:String, val imageId:Int) //省略了get和set方法。可以直接通过"对象.属性"拿到值,这是Kotlin内部做好封装的
    }

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