一霞捡、基本類型
1.數字
Double(64)、Float(32)薄疚、Long(64)碧信、Int(32)、Short(16)街夭、Byte(8)
val a = 1 //Int
val b = 3_000_000_000 //Long
val c = 1L //Long
val d: Byte = 1
val pi = 3.14 //Double
val e = 3.1415926f //float
顯示轉換
//java隱式轉換
int c = 1;
double e = c;
//kotlin較小的類型不能隱式轉換為較大的類型
val a = 1
val b: Double = a//報錯
//顯示轉化
val b: Double = a.toDouble()
2.字符
Char
//java中字符可以直接當數字使用
int f = 'f';
if (f == 1) {
}
//kotlin不行
val f = 'f'
if (f == 1) {//會報錯
}
//可以顯示轉換成Int
f.toInt()
3.布爾
Boolean
4.數組
//后面和集合Set Map一起總結
val g: Array<Int> = arrayOf(1, 2, 3)
4.字符串
val name = "jack"
//字符串模板
println("${name}的長度:${name.length}")
二音婶、變量
1.定義一個變量
//java
int a;
String b;
int c = 1;
String d = "dd";
//kotlin
var a: Int = 1
var b = "ss"
//以下錯誤
var c: String = null
2.延遲初始化
lateinit var c: String
3.var和val
val d = 10
4.空安全設計
有些情況變量無法保證是否為空。
//解除非空的限制莱坎,此變量就可以設置為空
var name: String? = null
//解除非空限制,如果初始為非空寸士,后續(xù)也可以置空
var name: String? = "aaa"
name = null
var view: View? = null
···
view = findViewById(R.id.image)
//view.setBackgroundColor(0xffffff) //錯誤
view?.setBackgroundColor(0xffffff) //檐什?會先判空,如果為空弱卡,則不執(zhí)行setBackgroundColor代碼
view!!.setBackgroundColor(0xffffff)//告訴編譯器不進行非空判斷
5.get/set
//定義一個變量乃正,就已經默認自帶了get和set方法
var name = "ss"
//相當于
var name = "ss"
get() {
return field
}
set(value) {
field = value
}
//如果需要自定義get/set方法
var name2 = "ss"
get() {
return field + "bb"
//return name2 + "bb" //不可以這樣,會報錯
}
set(value) {
field = value + "aa"
}
三婶博、方法
1.方法的聲明
fun test(name: String): String {
...
}
fun test(name: String, age: Int): Unit {
...
}
fun test(name: String, age: Int) {
...
}
//有返回值
fun test01(name: String): String {
return ""
}
//無返回值瓮具,Unit相當于void
fun test02(name: String): Unit {
}
//無返回值,Unit省略
fun test03(name: String) {
}
//參數可空
fun test04(name: String?) {
}
2.參數傳遞
//不可空變量凡人,傳入不可空參數里
val name = "11"
test03(name)
//可空變量
val name1: String? = "11"
//test03(name1) //傳入不可空參數里名党,編譯器會報錯
test04(name1) //傳入可空參數里,不會報錯
四挠轴、類
1.類聲明
class demo13 {
}
- 默認是public
- 默認是final的传睹,不可以繼承“痘蓿可以用open關鍵字
2.構造函數
主構造函數
class demo14 constructor() {
}
class demo15 constructor(name : String) {
}
//省略constructor關鍵字
class demo15(name: String) {
}
//主構造函數欧啤,沒有函數體睛藻,只用于傳參數進行初始化,如果需要初始化代碼邢隧,可以用init代碼塊
class demo16 constructor(name: String) {
init {
//...
}
}
次構造函數
//無主構造器的情況
class demo17 {
constructor(name: String) {
}
}
//主次共存時店印,次構造器必須直接或間接調用主構造器
class demo18 constructor(age: Int) {
val currentAge = age
lateinit var currentName: String
constructor(name: String, age: Int) : this(age) {
currentName = name
}
}
類的繼承
kotlin所有類繼承自Any
//demo18可以繼承必須用open關鍵字修飾
class demo19 constructor(age: Int) : demo18(age) {
}
//:不僅表示extend,還可以表示implement
interface Imp {
fun test()
}
//覆蓋方法
class demo20 constructor(age: Int) : demo19(age), Imp {
override fun test() {
}
}
抽象類
//定義抽象類
abstract class demo22 {
abstract fun test()
}
//子類
class demo23: demo22() {
override fun test() {
}
}
//實例化
fun test01() {
val demo23 = demo23()
}
//open不具有遺傳性倒慧,不能影響到子類按摘,override關鍵字效果可以影響到子類
open class demo24: demo22() {
override fun test() {
}
}
class demo26: demo24() {
override fun test() {//繼承之后,仍然可以重寫test方法迫靖,如果不允許test重寫院峡,可以final修飾
super.test()
}
}