Android 新語言Kotlin

一、程序入口

/**
 * Kotlin主程序入口
 * 面向?qū)ο缶幊? */
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 關(guān)鍵字
    if(luo is horse.luo){
        luo.say();
    }
    //抽象是本質(zhì),接口是能力
}

class Kotlin(var name:String){
    var n=name;

    fun Hello(){
        println("Hello Kotlin");
    }
}

二、抽象

  • 抽象類
abstract class Human(var str:String) {
    abstract fun say();
}
  • 實現(xiàn)類
class Man(str:String) : Human(str) {

    override fun say() {
        println("${str} Man");
    }
}

三、基礎(chǔ)

  • 字符串轉(zhuǎn)Int
fun main(args: Array<String>) {
    var a = "13";
    var b = 13;

    //字符串轉(zhuǎn)數(shù)字
    a.toInt();
    println("a="+a);
    //數(shù)字轉(zhuǎn)字符串
    b.toString();
    println("b="+b);
    //注意,字母和數(shù)字混合轉(zhuǎn)換會異常
    var c ="a3";
    c.toInt();
    println("c="+c);
}
  • 階層(遞歸)
fun fact(i:Int):Int{
    if(i==1){
        return 1;
    }else{
        return i* fact(i - 1);
    }
}
  • 尾遞歸優(yōu)化(tailrec關(guān)鍵字)
tailrec fun sum(i:Int,result:Int):Int{
    if(i==1){
        return 1;
    }else{
        return sum(i - 1, result + i);
    }
}
  • 函數(shù)
//帶返回值
fun first(a: Int, b: Int): Int {
    return a + b;
}
//不帶返回值
fun second(a: Int, b: Int): Unit {
    //支持EL表達式
    println("${a}和$是整數(shù)");
}
//當(dāng)方法體代碼只有一行,可簡寫
fun third(a: Int, b: Int): Int = a + b;
//String的比較
fun string(s1: String, s2: String) {
    //與Java相同
    println(s1.equals(s2))
    //第二個參數(shù)表示是否忽略大小寫
    s1.equals(s2, true);
    //與Java不同,Java比較的是兩個數(shù)的內(nèi)存地址
    println(s1 == s2)
}
//空值處理,?號代表參數(shù)可為空,否則不為空
fun Null(str: String?) {
    println(str);
}
//默認(rèn)參數(shù)(a)與具名參數(shù)(b,具體在main)
fun Name(a: Int = 1, b: Int) {
    println("${a},$")
}
fun main(args: Array<String>) {
    second(1, 2);

    //函數(shù)表達式,接收兩個參數(shù),返回相加結(jié)果
    var i = { a: Int, b: Int -> a + b }
    println(i);
    var j: (Int, Int) -> Int = { x, y -> x + y }
    println(j);

    //具名參數(shù)
    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["學(xué)"]="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

    //數(shù)據(jù)類型的取值范圍,其余同理
    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關(guān)鍵字用法
fun When(score:Int){
    when(score){
        10 -> println("10分");
        9 -> println("9分");
        8 -> println("8分");
        else -> println("繼續(xù)加油");
    }
}
//區(qū)間和遍歷的表示
fun sum(){
    //數(shù)組【1,100】
    var nums=1 .. 100;
    var result = 0;
    //遍歷
    for(num in nums){
        result+=num;
    }
    println("結(jié)果是:"+result);
}

fun sum2(){
    //數(shù)組【1,100)
    var nums=1 until  100;
    var result = 0;
    //遍歷
    for(num in nums){
        result+=num;
    }
    println("結(jié)果是:"+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關(guān)鍵字,可被繼承
open class Father {

    private var age:Int=50;

    //open,允許被覆蓋
    open fun say(){
        println("Father");
    }
}
: 代表 extends ,() 代表 constructer(構(gòu)造方法)
class Son : Father(){

    override fun say() {
        println("Son");
    }
}

六、接口

//接口
interface IMan {
    fun handsome();
}
//by 接口代理關(guān)鍵字, Wjx 代理 AAA
class AAA :IMan by Wjx {

}
//object 單例關(guān)鍵字
object Wjx : IMan {
    override fun handsome() {
        println("wjx is handsome");
    }
}

七、印章

/**
 * 印章/密封類
 * 沒有構(gòu)造方法
 * 限定子類構(gòu)造(luo 、lv)
 */
sealed class horse {
    fun say() {
        println("hello");
    }

    class luo : horse() {
        //horse子類
    }

    class lv : horse() {
        //horse子類
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容