一.常量與變量
val(value 的簡(jiǎn)寫(xiě))用來(lái)聲明不可變的變量,類似java中的final,不可重復(fù)賦值
val <標(biāo)識(shí)符> : <類型> = <初始值>
var(variable的簡(jiǎn)寫(xiě))用來(lái)聲明可變的變量,可被重新賦值
var <標(biāo)識(shí)符> : <類型> = <初始值>
val a : String = "123"
注:也可直接寫(xiě)成 val a = "123" 這里的a會(huì)被自動(dòng)推導(dǎo)成字符串變量,這是kotlin的類型推導(dǎo)機(jī)制
var a : String = "123"
把val 修改成var后,即可修改a的值
二.函數(shù)(方法)
函數(shù)是用來(lái)運(yùn)行代碼的載體
基本用法:
fun 方法名(參數(shù)) : 返回值類型{方法體}
fun是定義函數(shù)的關(guān)鍵字,無(wú)論定義什么函數(shù)都需要用fun聲明
1.有返回值
fun domain(param1 : Int,param2 : Int) : Int{
return max(param1,param2)
}
簡(jiǎn)化寫(xiě)法:
fun domain(param1 : Int,param2 : Int) : Int = max(param1,param2)
2.無(wú)返回值
fun domain(param1 : Int) : Unit{
println("$param1")
}
注:Unit相當(dāng)于java中的void,也可以不寫(xiě)
fun domain(param1 : Int){
println("$param1")
}
三.程序的邏輯控制
1.if語(yǔ)句
kotlin中的if語(yǔ)句跟java中的if語(yǔ)句用法基本一樣
寫(xiě)法可不斷精簡(jiǎn)
fun domain(param1 : Int,param2 : Int) : Int{
var a = 0
if (param1>param2){
a = param1
}else{
a = param2
}
return a
}
fun domain(param1: Int, param2: Int): Int {
val a = if (param1 > param2) {
param1
} else {
param2
}
return a
}
fun domain(param1: Int, param2: Int): Int {
return if (param1 > param2) {
param1
} else {
param2
}
}
fun domain(param1: Int, param2: Int): Int = if (param1 > param2) {
param1
} else {
param2
}
fun domain(param1: Int, param2: Int): Int = if (param1 > param2)
param1
else
param2
2.when條件語(yǔ)句
kotlin中的when語(yǔ)句跟java中的switch語(yǔ)句很相似,但卻比switch強(qiáng)大很多
例子:有返回參數(shù)傳入一個(gè)分?jǐn)?shù),返回描述
fun ScoreDescn(score:Int):String{
var descn:String;
when(score){
10 -> descn = "優(yōu)"
9 -> descn = "良"
8 -> descn = "中"
7 -> descn = "可"
else -> descn = "差"
}
return descn
}
運(yùn)行
fun main(){
val a = 10
ScoreDescn(a)
}
返回 "優(yōu)"
無(wú)返回參數(shù)
fun ScoreDescn(score:Int){
when(score){
10 -> "優(yōu)"
9 -> "良"
8 -> "中"
7 -> "可"
else -> "差"
}
}
3.循環(huán)語(yǔ)句
for循環(huán) kotlin中把java中的for-i循環(huán)直接舍棄,加強(qiáng)了java中的for-each循環(huán),變成了for-in循環(huán)
0到10遍歷
..是創(chuàng)建兩端閉區(qū)間的關(guān)鍵字 數(shù)學(xué)表達(dá)式[0,10]
for(i in 0..10){
println(i)
}
until是左閉右開(kāi)區(qū)間的關(guān)鍵字 數(shù)學(xué)表達(dá)式[0,10)
for(i in 0 until 10){
println(i)
}
四.類
創(chuàng)建一個(gè)類
class Car {
}
然后定義一個(gè)變量“速度“,并在里面加上兩個(gè)動(dòng)作,跑和停止兩個(gè)函數(shù)
class Car {
var velocity = 0
fun run(){
velocity = 10
println("這輛車的速度達(dá)到了"+velocity)
}
fun stop(){
velocity = 0
println("這輛車的速度達(dá)到了"+velocity)
}
}
然后進(jìn)行實(shí)例化,kotlin中取消了new關(guān)鍵字
fun main(){
val car = Car()
car.velocity = 10
car.run()
car.velocity = 0
car.stop()
}
繼承與構(gòu)造函數(shù)
在kotlin中所有任何一個(gè)非抽象類默認(rèn)都是不可以被繼承的,相當(dāng)于java中加了final關(guān)鍵字,如果需要被繼承要在類的前面加上open關(guān)鍵字
open class Car {
.......
}
class bus : Car(){
}
kotlin中將構(gòu)造函數(shù)分成了主構(gòu)造函數(shù)和次構(gòu)造函數(shù)
主構(gòu)造函數(shù)的特點(diǎn)是沒(méi)有函數(shù)體,直接定義在類名后面即可
class Bus(val size : Int) : Car(){
}
val bus = Bus(10)
kotlin提供了一個(gè)init結(jié)構(gòu)體,所有主構(gòu)造函數(shù)中的邏輯寫(xiě)在里面
class Bus(val size : Int) : Car(){
init {
println(size)
}
}
任何一個(gè)類可以有多個(gè)次構(gòu)造函數(shù),所有次構(gòu)造函數(shù)都必須調(diào)用主構(gòu)造函數(shù)(包括間接調(diào)用),次構(gòu)造函數(shù)是通過(guò)constructor關(guān)鍵字定義的
class Bus(val size : Int,height : Int) : Car(height){
constructor(height: Int):this(10,100){
}
constructor():this(0){
}
}