美文网首页
Android 新语言Kotlin

Android 新语言Kotlin

作者: 潜心之力 | 来源:发表于2018-02-03 23:37 被阅读0次

    一、程序入口

    /**
     * Kotlin主程序入口
     * 面向对象编程
     */
    fun main(args:Array<String>){
        var kotlin = Kotlin("name");
        kotlin.Hello();
        //extend
        var son = Son();
        son.say();
        //abstract
        var man = Man("wjx");
        man.say();
        //interface
        var wjx = Wjx;
        wjx.handsome();
        //被wjx代理
        var aaa = AAA();
        aaa.handsome();
        //enum
        var e =Enum.SATURDAY;
        println(e.ordinal);
        //sealed
        var luo =horse.luo();
        //is 关键字
        if(luo is horse.luo){
            luo.say();
        }
        //抽象是本质,接口是能力
    }
    
    class Kotlin(var name:String){
        var n=name;
    
        fun Hello(){
            println("Hello Kotlin");
        }
    }
    

    二、抽象

    • 抽象类
    abstract class Human(var str:String) {
        abstract fun say();
    }
    
    • 实现类
    class Man(str:String) : Human(str) {
    
        override fun say() {
            println("${str} Man");
        }
    }
    

    三、基础

    • 字符串转Int
    fun main(args: Array<String>) {
        var a = "13";
        var b = 13;
    
        //字符串转数字
        a.toInt();
        println("a="+a);
        //数字转字符串
        b.toString();
        println("b="+b);
        //注意,字母和数字混合转换会异常
        var c ="a3";
        c.toInt();
        println("c="+c);
    }
    
    • 阶层(递归)
    fun fact(i:Int):Int{
        if(i==1){
            return 1;
        }else{
            return i* fact(i - 1);
        }
    }
    
    • 尾递归优化(tailrec关键字)
    tailrec fun sum(i:Int,result:Int):Int{
        if(i==1){
            return 1;
        }else{
            return sum(i - 1, result + i);
        }
    }
    
    • 函数
    //带返回值
    fun first(a: Int, b: Int): Int {
        return a + b;
    }
    
    //不带返回值
    fun second(a: Int, b: Int): Unit {
        //支持EL表达式
        println("${a}和${b}是整数");
    }
    
    //当方法体代码只有一行,可简写
    fun third(a: Int, b: Int): Int = a + b;
    
    //String的比较
    fun string(s1: String, s2: String) {
        //与Java相同
        println(s1.equals(s2))
        //第二个参数表示是否忽略大小写
        s1.equals(s2, true);
        //与Java不同,Java比较的是两个数的内存地址
        println(s1 == s2)
    }
    
    //空值处理,?号代表参数可为空,否则不为空
    fun Null(str: String?) {
        println(str);
    }
    
    //默认参数(a)与具名参数(b,具体在main)
    fun Name(a: Int = 1, b: Int) {
        println("${a},${b}")
    }
    
    fun main(args: Array<String>) {
        second(1, 2);
    
        //函数表达式,接收两个参数,返回相加结果
        var i = { a: Int, b: Int -> a + b }
        println(i);
        var j: (Int, Int) -> Int = { x, y -> x + y }
        println(j);
    
        //具名参数
        Name(b = 2);
    }
    
    • 集合
    //List
    fun list(){
        var lists = listOf<String>("apple","peach","watermenlon");
        for((i,e) in lists.withIndex()){
            print("${i},${e}");
        }
        println();
    }
    
    //Map
    fun map(){
        var maps =TreeMap<String,String>();
        maps["好"]="good";
        maps["学"]="study";
        println(maps["好"]);
    }
    
    • 键盘读入
    fun main(args: Array<String>) {
        var num1Str = readLine();
        //!!代表不可为空
        var num1 =num1Str!!.toInt();
        var num2Str = readLine();
        var num2 =num2Str!!.toInt();
        println("${num1}+${num2}=${num1.plus(num2)}");
    }
    
    • 自动推断类型
    //推断为Int
    var i =18;
    
    //推断为Long
    var j=99999999999;
    
    //推断为String
    var s="hello"
    
    /**
     * Var变量不赋值时,需要声明变量类型
     */
    fun main(args: Array<String>) {
        var c:Int
    
        //数据类型的取值范围,其余同理
        val aByte:Byte= Byte.MAX_VALUE;
        val bByte:Byte= Byte.MIN_VALUE;
        println("max:"+aByte);
        println("min:"+bByte);
    }
    
    • 变量和常量
    fun main(args: Array<String>) {
        //变量的声明与使用
        var name:String="张三";
        println(name);
        name="李四";
        println(name);
        //常量的声明与使用
        val pass:String;
        pass="pass";
        println(pass);
    }
    
    • 遍历
    //When关键字用法
    fun When(score:Int){
        when(score){
            10 -> println("10分");
            9 -> println("9分");
            8 -> println("8分");
            else -> println("继续加油");
        }
    }
    
    //区间和遍历的表示
    fun sum(){
        //数组【1,100】
        var nums=1 .. 100;
        var result = 0;
        //遍历
        for(num in nums){
            result+=num;
        }
        println("结果是:"+result);
    }
    
    fun sum2(){
        //数组【1,100)
        var nums=1 until  100;
        var result = 0;
        //遍历
        for(num in nums){
            result+=num;
        }
        println("结果是:"+result);
    }
    
    //step用法
    fun sum3(){
        var nums= 1 .. 16;
        for(num in nums step 2){
            print("${num}"+" ");
        }
        println();
    }
    
    //reversed用法
    fun sum4(){
        var nums =1..16;
        var nums2=nums.reversed();
        for(num in nums2){
            print("${num}"+" ");
        }
        println();
    }
    

    四、枚举

    enum class Enum {
        MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
    }
    

    五、继承

    //open关键字,可被继承
    open class Father {
    
        private var age:Int=50;
    
        //open,允许被覆盖
        open fun say(){
            println("Father");
        }
    }
    
    : 代表 extends ,() 代表 constructer(构造方法)
    class Son : Father(){
    
        override fun say() {
            println("Son");
        }
    }
    

    六、接口

    //接口
    interface IMan {
        fun handsome();
    }
    
    //by 接口代理关键字, Wjx 代理 AAA
    class AAA :IMan by Wjx {
    
    }
    
    //object 单例关键字
    object Wjx : IMan {
        override fun handsome() {
            println("wjx is handsome");
        }
    }
    

    七、印章

    /**
     * 印章/密封类
     * 没有构造方法
     * 限定子类构造(luo 、lv)
     */
    sealed class horse {
        fun say() {
            println("hello");
        }
    
        class luo : horse() {
            //horse子类
        }
    
        class lv : horse() {
            //horse子类
        }
    }
    

    相关文章

      网友评论

          本文标题:Android 新语言Kotlin

          本文链接:https://www.haomeiwen.com/subject/qqltzxtx.html