Android 新语言Kotlin

一、程序入口

/**
 * Kotlin主程序入口
 * 面向对象编程
 */
fun main(args:Array){
    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) {
    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) {
    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("apple","peach","watermenlon");
    for((i,e) in lists.withIndex()){
        print("${i},${e}");
    }
    println();
}
//Map
fun map(){
    var maps =TreeMap();
    maps["好"]="good";
    maps["学"]="study";
    println(maps["好"]);
}
  • 键盘读入
fun main(args: Array) {
    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) {
    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) {
    //变量的声明与使用
    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)