一、定義
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 > !