Kotlin 基础学习

1. var 和 val

var理解成java中的变量,val理解成被 final 修饰的常量。
var id1 : String = "vicent"
id1 = "sfa"
val id2 : String = "112erf"
id2 = "dfs"http:// 会 报错
fun main() {
    // kotlin 的安全设计对于声明可为空的参数,在使用时要进行空判断处理
    // 有两种处理方式:字段后加!!像java一样抛出空异常,另一种字段后加?
    var info: String?= null

//    println(info?.length)// 为空不执行后面的代码

//    println(info!!.length)// 自己负责info, == java

    println(test("b"))
    // 如果一定要输出null 就输出 "你狠牛逼"
    println(info?.length  ?: "你狠牛逼")
}

// : int? == 允许返回null
fun test(name : String) : Int? {
    if (name == "a") {
        return 100
    }
    return null
}

类型推导

var name2 = "vicent"http:// 类型推倒
var name3 = 18
var name4  = 'A'

2. 函数

// void == : Unit 可以不写Unit
fun main() : Unit {
    println(add2(1, 4))
    lenMethod(1,2,3)
}

fun add(number1: Int, number2: Int) : Int {
    return number1 + number2
}

// 类型推导
fun add2(number1: Int, number2: Int) = number1 + number2

fun lenMethod(vararg  value : Int) {// 可变参数
    for (i in value) {
        println(i);
    }
}

3. 字符串模板

    var name = "张三"
    var name2 = 18
    var name3 = 'A'

    println("name:$name, name2:$name2, name3=$name3")

    // 换行
    val infoMsg = """
        AAAA
        BBBB
        ccccc
        ddddddd
    """.trimIndent()// 去掉这个之后会有前置空格

    println(infoMsg)

4. NULL检查机制

    // kotlin 的安全设计对于声明可为空的参数,在使用时要进行空判断处理
    // 有两种处理方式:字段后加!!像java一样抛出空异常,另一种字段后加?
    var info: String?= null

    println(info?.length)// 为空不执行后面的代码

    println(info!!.length)// 自己负责info, == java

5. in 区间

fun main() {

    for (i in 1..9) {
//        println(i)
    }

    // 不会输出
    for (i in 9..1) {
//        println(i)
    }

    for (i in 9 downTo 1) {
//        println(i)
    }

    // 区间判断
    val value = 9
    if (value in 1..100) {
//        println("包含了")
    }

    // 指定步长
    for (i in 1..20 step 2) {
        println(i)
    }
    
    // 排除最后元素
    for (i in 1 until 10) {
        println(i)
    }
}

6. 比较两个值

fun main() {
    var name1: String = "张三"
    var name2: String = "张三"

    println(name1.equals(name2))
    println(name1==name2) // 推荐使用

    // 比较对象地址 ===
    var age1:Int? = 10000
    var age2:Int? = 10000
    println(age1 === age2)// false
}

7. 数组

fun main() {
    val numbers = arrayOf(1,2,4,5)
    for (i in numbers) {
        println(i)
    }

    val number2 = Array(10, {value: Int -> (value + 100) })
    for (value in number2) {
        println(value)
    }

}

8. if 条件判断

fun main() {
    val number1: Int = 99
    val number2: Int = 88

    val maxValue = if (number1 > number2) number1 else number2
    println(maxValue)

    val number = 5
    when (number) {
        1 -> println("11")
        2 -> println("22")
        3 -> println("33")
        4 -> println("44")
        5 -> println("55")
        else -> println("其他")
    }

    when (number) {
        in 1..100 -> println("11")
        in 101..200 -> println("22")
        else -> println("其他")
    }

    val result = when (number) {
        1 -> {
            println("很开心")
            "今天是星期一"
        }
        2 -> {
            println("很开心")
            "今天是星期二"
        }
        else -> "其他"
    }
    println(result)
}

9. 循环和标签

fun main() {
    abcd@for (i in 1..10) {
        for (j in 1..10) {
            println("i:$i, j:$j")
            if (i == 5) {
//                break
                break@abcd
            }
        }
    }

    var items = listOf<String>("aa", "bb", "cc")
    for (item in items) {
//        println(item)
    }

//    items.forEach { println(it) }
    // 下标
    for (index in items.indices) {
    }

}

// 自带的标签
class Dayang {
    val I = "aaa"

    fun show() {
        println(I)
        println(this.I)
        println(this@Dayang.I)
    }
}

10. 类

// 默认 public final class person 不能被集成,在class前面加上open就可以被集成
class Person(id : Int) {// 主构造

    // 次构造 必须委托给主构造
    constructor(id: Int, name : String) : this(id) {

    }

    // 次构造
    constructor(id: Int, sex : Char) : this(id) {

    }
}

Java 单例模式和Kotlin单例模式对比

Java

public class NetManager {
    
    static class Holder {
        private static NetManager instance = new NetManager();
    }
    
    public static NetManager getInstance() {
        return Holder.instance;
    }
    
}

Kotlin

class NetManager {

    // 被objec 修饰的类 只实例一次 不需要()
    object Holder {
        val instance = NetManager()
    }

    // 派生操作 类被创建的时候一起被创建 看不到 static
    companion object {
        // 全部都是 相当于 Java static
        fun getInstance() : NetManager = Holder.instance;
    }

}

懒汉式单例Java

public class NetManager2 {

    private static NetManager2 instance = null;

    public static NetManager2 getInstance() {
        if (instance == null) {
            instance = new NetManager2();
        }
        return instance;
    }

}

kotlin

class NetManager {
    companion object {
        private var instance : NetManager?= null
        fun getInstance() : NetManager {
            if (instance == null) {
                instance = NetManager();
            }
            return instance!!;
        }
    }
}

内部类和嵌套类

class Test {
    val I = "aaaa"

    //  这个不是内部类是嵌套类
    class Sub {
        fun show() {
            println(I);// 会报错
        }
    }

    // inner修饰内部类
    inner class Sub2 {
        fun show() {
            println(I);// 会报错
        }
    }
}

实例类,so easy, 相当于java bean,会默认帮我们创建get set方法,以及toString equals copy 等方法

data class User(val id: Int, val name : String)
public final class User {
   private final int id;
   @NotNull
   private final String name;

   public final int getId() {
      return this.id;
   }

   @NotNull
   public final String getName() {
      return this.name;
   }

   public User(int id, @NotNull String name) {
      Intrinsics.checkParameterIsNotNull(name, "name");
      super();
      this.id = id;
      this.name = name;
   }

   public final int component1() {
      return this.id;
   }

   @NotNull
   public final String component2() {
      return this.name;
   }

   @NotNull
   public final User copy(int id, @NotNull String name) {
      Intrinsics.checkParameterIsNotNull(name, "name");
      return new User(id, name);
   }

   // $FF: synthetic method
   public static User copy$default(User var0, int var1, String var2, int var3, Object var4) {
      if ((var3 & 1) != 0) {
         var1 = var0.id;
      }

      if ((var3 & 2) != 0) {
         var2 = var0.name;
      }

      return var0.copy(var1, var2);
   }

   @NotNull
   public String toString() {
      return "User(id=" + this.id + ", name=" + this.name + ")";
   }

   public int hashCode() {
      int var10000 = this.id * 31;
      String var10001 = this.name;
      return var10000 + (var10001 != null ? var10001.hashCode() : 0);
   }

   public boolean equals(@Nullable Object var1) {
      if (this != var1) {
         if (var1 instanceof User) {
            User var2 = (User)var1;
            if (this.id == var2.id && Intrinsics.areEqual(this.name, var2.name)) {
               return true;
            }
         }

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