[TOC]html
本系列文章做爲學習簡單的學習筆記,其目的在於2個:java
本系列適合徹底沒有學過Kotlin而且像快速入門的同窗,本人如今也是在學習中,因此做爲筆記不免會有錯誤,若是我理解的不對或是有疑問,真誠但願能夠在留言區你們進行討論。git
val b:Boolean=true
複製代碼
定義類型格式 :訪問修飾符 修飾符 對象名:類名=具體賦值github
變量的修飾符有2種:數組
val修飾相似於java中的final修飾,定義時必須初始化(或在構造方法中或是init{}方法中),可是不徹底相同Kotlin常量用const修飾。注意是不可變屬性不是靜態屬性安全
var是可變屬性,能夠不初始化,能夠屢次賦值bash
在kotlin中不像java,基本數據類型能夠用小寫的boolean聲明。這裏必須用他的裝箱類來定義。
訪問修飾符默認是public(java是defualt)函數
val l:Long=1231231L
val l1:Long=1231231
val l2:Long=1231231l//error
val f:Float=3f
val f1:Float=3.0F
val f2:Float=3.0//error
val d1:Double=3.0
val s:Short=12712
val byte:Byte=127
複製代碼
在java中有基本數據類型int對應的裝箱類型Integer,Kotlin中是沒有這個概念的Kotlin中的Int至關於int與Integer合體,編譯器會幫我選擇。
Kotlin中不存在隱式轉換,如:學習
short s = 0;
int i = 0;
long l = 0;
i = s;
l = i;
l = s;
複製代碼
java中正確 Kotlin中ui
val s: Short = 0
var i: Int = 0
i = s.toInt()
i = s//error
複製代碼
與java基本一致,這裏列出一些經常使用的轉義字符
轉義字符 | 含義 |
---|---|
\t | 製表符 |
\b | 光標後退一個字符 |
\n | 回車 |
\r | 光標回到行首 |
' | 單引號 |
" | 雙引號 |
\ | 反斜槓 |
$ | 美圓符號,Kotlin 支持美圓符號開頭的字符模板 |
val str: String = "str"
val str1: String = String(charArrayOf('s', 't', 'r'))
fun main(args: Array<String>) {
println(str== str1)
println(str=== str1)
}
結果:
true
false
複製代碼
Kotlin中== 至關於.equals()對象比較相等用 ===
val int1: Int = 1
val int2: Int = 2
println(" " + int1+ " + " + int2 + " = " + (int1 + int2))
println("$int1 + $int2 = ${int1 + int2}")
//hello "world"
//前面提到的轉義字符
println("hello \"world\"")
val s:String=""" \t \n hello World """
println(s)
結果:
1 + 2 = 3
1 + 2 = 3
hello "world"
\t
\n
hello World
複製代碼
"${}"字符串模板 """ """ 原始字符串
複製代碼
直接將理論仍是不夠直觀,因此直接上代碼:
class 美女 private constructor(val 性格: String, val 長相: String, val 聲音: String) {//1
constructor(性格: String, 長相: String, 聲音: String, 三圍: String) : this(性格, 長相, 聲音)//2
constructor(性格: String, 長相: String) : this(性格, 長相, "動聽")
}
class 帥哥(性格: String, 長相: String, 聲音: String) : 人(性格, 長相, 聲音) {//3
init {//4
println("帥哥: 性格:$性格,長相:$長相,聲音:$聲音")
}
}
class Test{//5
val d: Double
val i: Int
constructor(double: Double, int: Int) {
d = double
i = int
}
constructor(double: Double) {
d = double
i = 0
}
}
open class 人(val 性格: String, val 長相: String, val 聲音: String) {
init {
println("new 了一個${this.javaClass.simpleName}: 性格:$性格,長相:$長相,聲音:$聲音")
}
fun funA() {
println(this.聲音)//6
}
}
fun main(args: Array<String>) {
val 我喜歡的妹子: 美女 = 美女("溫柔", "甜美", "動聽","三圍")
val 我膜拜的漢子: 帥哥 = 帥哥("彪悍", "帥氣", "渾厚")
val test1 = Test(2.0)
val test2 = Test(2.0, 3)
}
複製代碼
這段代碼有點長,可是內容很是簡單,我也會分開來講
class <類名> 構造器(實參1/形參1,實參2/形參2){
}
複製代碼
Kotlin的構造函數分爲主構造器(primary constructor)和次級構造器(secondary constructor)。
簡單理解就是寫在類名後面的爲主構造器
寫在類裏面的爲次構造器
當主構造器被可見性修飾符修飾時,必須加上constructor關鍵字不然能夠省略,如3處帥哥類
更多知識參考Kotlin的構造函數
在Kotlin對函數有更嚴格的要求,如在Java中你能夠寫這樣一個方法:
public String getName() {
return null;
}
複製代碼
這樣徹底是沒問題的,可是在Kotlin中卻不能夠
<可見性修飾符> <其餘修飾符> fun 方法名(形參1,形參2):<返回值類型>{
}
複製代碼
這個不難理解,基本和Java同樣都是固定格式,沒什麼好說的.
若是這個方法返回本省就可能爲空怎麼辦呢?能夠這樣寫:
fun getName(): String? {
return null
}
複製代碼
String?表示他是一個可null的字符串,咱們調用時能夠這樣:
fun getName(): String? {
return null
}
fun main(args: Array<String>) {
val nameB:String? = getName()
println(nameB?.length)//
}
複製代碼
nameB?這樣表示name不爲空那麼就輸出長度,不然打印null,這樣程序不會崩潰 可是還有一種狀況以下:
val value:String ?= "HelloWorld"
println(value!!.length)
複製代碼
定義value是可空類型,可是我明確知道它不是null,那麼咱們可使用value!!,表示我已經肯定知道這個值不是null,不要給我報編譯錯誤。
總結
下面來看:
if (name != null)
println(name.length)
else
return
等價於:
val name: String = getName()?: return
println(name.length)
複製代碼
經過條件語句肯定name必定不爲空那麼能夠直接調用方法,這就是隻能轉換String?轉String
Java中:
class Parent{
}
class Chlid extends Parent{
public int age=11
}
public void main(){
Parent parent=new Child()
((Chlid)parent).age
}
複製代碼
只有強轉才能調用子類的方法,可是在Kotlin中卻不用 以下:
val parentA: Parent = Chlid()
if (parentA is Chlid) {
parentA.age
}
複製代碼
is關鍵字,經常使用語判斷,若是判斷成立那麼parentA就是Child不用強轉 關於強轉以下:
val chlidA: Chlid = parentB as Chlid//非安全強轉失敗crash
val chlidB: Chlid? = parentB as? Chlid//安全強轉失敗爲null
複製代碼
總結:
◆ Java Style類型轉換
◆ 安全類型轉換
◆ 智能類型轉換
關於區間比較簡單 直接說下概念:
代碼:
val rangeInt: IntRange = 1..1024//[0,1024]
val range_exclusive: IntRange = 0 until 1024//[0,1024)
val b: Boolean = true
fun main(args: Array<String>) {
println(rangeInt.contains(50))
println(rangeInt.contains(1024))
println(1024 in rangeInt)
println(range_exclusive.contains(1024))
println(1024 in range_exclusive)
for (i in range_exclusive) {
println(i)
}
}
複製代碼
數組的使用方法
基本操做
爲了不沒必要要的裝箱和拆箱, 基本類型的數組是定製的以下:
val arrayInt: IntArray = intArrayOf(1, 3, 5, 7)
val arrayChar: CharArray = charArrayOf('H', 'e', 'l', 'l', 'o')
val arrayString: Array<String> = arrayOf("陳", "冠", "希")
val array書記: Array<市委書記> = arrayOf(市委書記("張"), 市委書記("李"), 市委書記("王"))
fun main(args: Array<String>) {
println(arrayInt.size)
for (i in arrayInt) {
println(i)
}
println(arrayChar.joinToString(""))//鏈接字符
println(arrayString.joinToString(""))//鏈接字符串
println(array書記[1])
array書記[1] = 市委書記("趙")
println(array書記[1])
println(arrayInt.slice(1..3))//表示的是下標 slice表示"切片"
}
複製代碼
本篇就到這裏下一篇將說下程序結構相關。