关于方法和函数的区别(其实一直不清楚):面向过程的独立的叫函数 面向对象的类中定义的叫做方法
方法和对象相关;
函数和对象无关。
Java中只有方法,C中只有函数,而C++里取决于是否在类中
原则
kotlin是强类型语言 1.要么指定变量类型 2要么指定变量值(编译器根据值来自动进行类型设置)
不需要new 关键字
不需要结束符号 ;
不需要指定类型 var k =3(隐式指定类型)
不支持8进制
基本数据类型(Kotlin 本质上不存在基本数据类型,他只存在引用数据类型,类似java中的包装类)
1.变量声明 关键词 var
显示指定类型
var i :Int =0
var 变量名 : 类型 = 初始化值
看起来比 java的 int k =0; 还要复杂
其实可以不声明变量类型 比如
var i =0
var w =“sdfsdf”
隐式指定类型 这样才有优势
var i =0
i="12312" (这是错误的,i的类型为 Int 不能赋值为String)
2. val 常量声明(类似java 中的final)
val i :Int =9
fun doFun{
val k :Int
}
局部变量中这样声明常量是允许的 但在使用前要进行初始化,同时一旦初始化 该值就不可改变
细节: kotlin中的 声明的变量不允许赋值为null 或者不赋值 必须进行初始化
var i :String = null (编译器会报错)
var i :String (同样会报错)
要想赋值为null 必须要在 基本类型后面加 ?
var i :String ? =null (正确方式)
区别在哪里:
var i :Int =5
var k : Int = 5
i===k ------------------->true
var i : Int? = 5
var k : Int? =5
i===k --------------------->false
当没有?修饰时,i与k 对应 java 中的 int 基本数据类型,
当有?修饰时,i与k不在对应java中的int类型,而是 Integer 类型,已经是对象而不是int
细节 kotlin 中 Char 不能直接转换为Int 同理Int 也不能直接转换为Char
var charN :Char =‘a’
var intN : Int = charN(这是错误的,无法通过) 反之亦然
3.基本类型转换
var k:Int = 10
var kStr:String =k.toString()
细节 kotlin 只支持显示类型转化 不支持隐式
var bookPrice : Byte = 80
var bookIntPrice : Int = bookPrice (错误,无法编译通过)
var bookIntPrice:Int = bookPric.toInt() (正确)
但是 var bookAllPrice = bookPrice+bookIntPrice (是正确)
kotlin在表达式中可以自动转换,这种转换是基于上下文推断出来的
两个char 类型无法进行相加 但可以进行相减 比如 char -char 返回一个Int 类型的值
Char + Int(char-Int) 值 返回 Char类型的值
细节
----> 安全调用 ?.
kotlin user?.dog?.name
user?首先判断 user是否为空
如果不为空 user?.dog? 判断user属性dog是否为空
如果dog?不为空 获取dog 的name属性
此工程中 user 或 dog 为空 整个值为null
----> let全局函数调用
var strNull :String
strNull?.let{ .... }
如果strNull 不为空 直接调用 let{ }中的代码
----> if else null判断替代品 ?:
var b : String?= "fikit"
var w = b?.length ?: -1
如果 ?: 左边为null 返回右边的值
如果 ?: 左边不为null返回左边的值
---->强制调用 !!.
var b : String ?=null
var length = b!!.length (可以强行通过编译)
3.字符串 转化为其他基本类型
字符串模板 ${ }
kotlin支持字符串模板 ${ }
var book = 89
var s ="图书价格是:${book}"
String contains 支持正则表达式
var str = "java123"
str.contains(Regex("\\d{3}"))
4.类型别名
typealias 类型别名=已有类型
typealias NodeSet = Set<Network.Node>
var set :NodeSet