Kotlin基礎學習筆記 (二)

一、定義
Kotlin是一門能夠運行在java虛擬機、Android、瀏覽器上的靜態語言與Java 100%兼容。
 
二、數據類型
 
 2.一、Numbers 基本數據類型
     Boolean數據類型
val aBoolean: Boolean = true; // val 變量名:變量類型= 賦值
 
Number數據類型
Type       
Bitwidth
Long
64
Int
32
Short
16
Byte
8
Double
64
Float
32  
 
 val aFloat :Float =2.0F(不加F是雙精度浮點型)
 val minFloat :Float = -Float.Max_VALUE
 0.0F/0.0F != Float.NaN 不是數
 
Integer :裝箱類型
int : 基本類型
Kotlin:Int = 基本類型+裝箱類型 :合體
 
2.二、字面量
    十進制:1
    Longs 類型大寫L :1L
    十六進制:0x01
    二進制:0b0000 0001
    八進制:無| 不支持八進制
 
2.三、字符串:
字符串String 不可變類型
字符char類型,一個char類型佔2個字節,表示一個16位字符
 
轉意符:由轉義字符、原聲字符串、換行和任意文本
\t : 製表符
\b: 光標後退一個字符
\n: 回車換行符
\r: 光標回到行首
\' : 單引號
\": 雙引號
\\ : 反斜槓
\$ : 美圓符號
 
Characters
    Characters 用 Char表示;用單引號表示Chararacter;能夠調用顯示轉換把Character轉換爲Int
Char 相似 於Java的基本類型 char ,Char?相似於Java引用類型Character。
 
字符串模版表達式——以$符號開始 ,內部是一個任意表達式
 兩個整型相加母版:
println("$anInt+$anotherInt= ${anInt + anotherInt}")
 
美圓符號
val salary : Int = 1000
print(「$$salary」) ===》$1000
 
原生字符串:
使用 引號三個(」」") 引發來的String,內部沒有轉義,經過 「空格」分開進行轉意
 
字符串比較:
a=b :賦值;在邏輯運算時有效
a ==b :等於運算;標示比較內容或是值,而不是引用;即相似於java的equals
a ===b ,徹底等於運算;表示比較對象是否相同,是否爲同一個,比較對象的引用值(同時也比較值)
 
基本類型的轉換——kotlin不支持隱式轉換
-val anInt : Int =5 
-val aLong : Long =anInt.toLong();  //顯示轉換
 
Numbers類型支持以下的轉換:
toByte() :Byte
toShot() :Short
toInt() :Int
toLong() :Long
toFloat() :Float
toDouble() :Double
toChar() :Char
 
 
    2.四、類和對象
類:一個抽象的概念,具備某些特徵的事物的歸納,不特定指代任何一個具體的食物
class <類名> ( 構造方法) {<成員>... }
         類和對象的關係
  •     一個類一般能夠有不少具體的對象
  •     一個對象本質上只能從屬於一個類
    Class (1)—————對應關係——————object(1…n)
 
     2.5  類的繼承
  •     提取多個類的共性獲得一個更抽象的類,便是父類
  •     子類擁有父類的一切特徵
  •     子類也能夠自定義本身的特徵
  •     全部的類都最終繼承自Any,全部類的始祖
 
    ex,一個簡單的對象及其構造方法:
            
class 妹子(var 性感: String,
        var 長髮: String,
        var 甜美: String){
    //若無具體實現能夠刪掉{ }
    init {
        println("new 了一個妹子, 性格:$性感,長髮:$長髮,甜美:$甜美")
    }
}
val 我喜歡的妹子: 妹子 = 妹子("咪咪","黑色","聲音")
 
 
 2.4.空類型和智能類型轉換
 
空類型安全
java:在java中null會報空指針異常
kotlin:在kotlin中 任意類型都有可空和不可空兩種
 
不可空類型 就相似與java中的基本數字類型,是原始的數字類型,好比,int,long,float,double等
可空類型 就至關於引用的數字類型,如integer,Long,Float,Double
 
ex 1:
判斷name 是否爲null的狀態
old 示例寫法: 
val name = xxx();
    if( name == null ){
        println(「xxxx」);
    }else{ 
        printlin(name.length)
    }
 
new 示例寫法:
val name = xxx():
//若是name不爲空就返回長度,不然返回null
println(name? .length)  
 
ex 2:
判斷name 是否爲null的狀態,若爲null則直接返回
 
old 示例寫法:
    val name = xxx();
    if(name == null ) return 
 
new 示例寫法:
//定義一個名爲name的變量,它的值是xxx();若是xxx()返回的是null,就進行return——>」?:"
    val name:String = xxx()?:return 
 
「?: always 表達式」:判斷問號以前的表達式;若是爲空,則執行?後面的語句
    
注意:將getName()的值返回並賦值給name,這個name的類型是一個不可爲null的String類型
val name : String = getName() ?: return 
println(name.length) //不然返回一個string類型的變量
 
ex 3:
對於一個可null的String類型,但值卻不是null
 
    val value :String? = 「FuckWorld」
       if( value is String )
       //在已經確定String 字符串不爲null的狀況下,可使用 「!!.」 進行表達式確定的闡述
        println(value !!.length)//  !!.強制承認空類型 nullable
 
類型轉換異常
   val parent: Parent = parent()
    val child:Child ?= parent as? Child//若是轉換失敗則拋出異常(安全的類型轉換)
       println( child ) //返回爲null 
 
// 這裏不能經過編譯. User對象不能是null
 var notNullUser: User= null
 
 // User能夠是 null 
var user: User? = null 
 
// 沒法編譯, user多是null,咱們須要進行處理
 user.print() 
 
// 只要在user != null時纔會打印
 user?.print() 
 
// 使用Elvis操做符來給定一個在是null的狀況下的替代值 
val name = user?.name ?: "empty」 
 
/** 若是user爲可空類型,又必定要調用它的成員函數和變量,
*能夠用 !! 操做符 兩種可能,
*要麼正確返回name,要麼拋出空指針異常 當user爲null,
*你不想返回null,而是拋出一個空指針異常,你就可使用它。 
**/
var name = user!!.name
 
 
任意類型都有可空和不可空兩種:
-val notNull:String = null    //錯誤,不能爲空
-val nullable: String?= null  //正確 ,能夠爲空 String可null類型
-notNull.length    //正確 ,不爲空的值能夠直接使用
-nullable.length    //錯誤, 可能爲空,不能直接獲取長度
-nullable !!.length  //正確,強制認定nullable不可空
-nullable ?.length  //正確 ,若nullable爲空,返回空
 
智能類型轉換
java style 類型轉換
-val  sub : SubClass = parent asSubClass 
——相似於java的類型轉換,失敗則拋出異常
 
安全類型轉換
-val  sub:SubClass ?= parent as?SubClass
——若是轉換失敗,返回null 不拋異常
 
智能類型轉換
-if(parent is SubClass)parent.<子類的成員>
    ——編譯器儘量的推導類型,遠離無用的類型轉換
-if(nullable != null) nullable.length
    ——正確!由於確認nullable不可空
 
2.5  包Package
 命名空間,限定一個類的使用範圍,路徑
 
2.6  區間Range
 
var ranger:IntRange=0..1024//閉區間 [0,1024] ,整形區間
    .. :rangeTo
var ranger_exclusive:IntRange=0 until  1024//半開區間 [0,1023] or [0,1024)
        until : CloseRange {
            CharRange / 
            ComparableRange /
             IntRange 
            / LongRange  }
 
var    emptyRange: IntRange = 0..-1 // 表示爲空區間 
     i in 0..100 判斷 i 是否再區間 [0,100]中 
        range.contains(50)  === 50 in range 
迭代: 
    for ( i in ranger_exclusive ) { 
                print (「 $i , 「) 
    }
 
2.7 數組 
數組數組 ,數是數,組是組,合在一塊兒就是組,就沒有數了。
數組就是一系列的對象
 
基本寫法:經過arrayOf 建立數組
    (1)包含數值的數組:val a:Array<String> = arrayOf(「yy」,」xx")
    (2)指定大小,元素位空的數組:val b: arrayOfNulls<String>(10)
    (3)函數數組: val c = Array(10, {i->(i+1).toString() } )
       (4)  kotlin 自帶原始類型 數組: xxArrayOf (... )
val arrayOfInt:IntArray = intArrayOf(1 ,3 ,5 ,7)
val arrayOfChar:CharArray = charArrayOf(「i」,」a」,」m")
val arrayOfString:Array<String>=arrayOf( 「me」,」is」 ,」god"); //字符串數組
 
 
基本操做
    一、數組的大小
    arrayOfInt.size 
    二、 輸出第i個元素:
        println( arrayOf對象名 [i])輸出
   三、 給第i個元素賦值:
       array[i] =Hello(「給第i個成員賦值」)
   四、 拼接整個元素並去除其中的默認「,」
        arrayOfChar .joinToString( 「」 ) //去除中間的,
    五、字符串切割:取值array中的第2個和第3個元素
       arrayOfInt .slice( 1..2 ) //傳入的是一個閉區間的元素
 
數組類型映射
Java type:  int[]  / String []
Kotlin type : kotlin.IntArray /  kotlin.Array<9out) String > !
相關文章
相關標籤/搜索