1.为什么学习Kotlin
a.Google官方指定(官方指定语言 以后java肯定会被替换,就像eclipse和Androidstudio 开发IDE一样)
b.简洁、现代、安全
c.无缝兼容java
2.开发IDE下载地址:https://www.jetbrains.com/idea/download/
3.Kotlin文件名结尾是.kt结尾
4.常亮:预期范围内恒定不变的量
定义: val 常量名 (任意名字,长度不限),给常量一个值,叫“赋值”,形式 val 常量名 = 值
val π = 3.1415926
val 女朋友个数 = 1
5.Kotlin 末尾不需要“;”结尾,命名可以是汉子
6.变量:可主动变更或者可预期内自动有规律或者无规律的量
定义:var 常量名 (任意名字,长度不限),给常量一个值,叫“赋值”,形式 var 常亮名 = 值
var 今天的温度 = 3
var 身高 = 168
语言比较:swift语言中的常量修改关键字是 let,变量是var
java语言的常量修饰关键字是final,变量是 没有final关键的的属性,
7.单行注释,//跟java语言一样
8.多行注释/**
这里是注释内容
**/
9.值得类型:
a.整型Int:例如 1,3,66 这些都是整型
b.浮点型:Double(双精度)/Float(单精度),默认是Double(双精度)
c.布尔型: Boolean,表示逻辑上的真或者假,值为true和false
由于Kotlin有类型推断,类型可以省略不写
//Kotlin
var run = 5 或者 var jump : Int = 6
//java,必须有数据类型
int run = 5;
//swift3.0
var run = 5 或者 var run : Int = 5
10.变量使用在字符串中使用 :${var}
var run = 5
run = 6
print ("每天跑${run}公里")
11.类型安全: 变量一旦定义,其类型不可修改
var number = 3
//number = "五个" ,这是不允许的
12.元组(Tuple),给多个变量同事赋值,分二元(Pair)和三元(Triple)
fun main(args: Array) {
val (name,age) = Pair("小明",4);
var (p,c,z) = Triple("河北省","邯郸","临漳");
//上面可以写一个变量名,最多同时可以给三个变量赋值
val person = Pair("小明",4)
val address = Triple("河北省","邯郸","临漳")
print("名字:${name},年龄${age},地址:${p}${c}${z}")
print("名字:${person.first},年龄${person.second},地址:${address.first}${address.second}${address.third}")
}
13.可空类型:代表变量可以没有值得情况
形式: var 变量 : 类型? ,无值则是null
var sex : Boolean? = null
//java中默认boolean是false不可能为null
14.操作符+、—、、/、%、=、+=、-=、=、/=、>、<、<=、>=:跟其他语言一样。规范写法是两元运算符前后加空格,数字太大的话可以使用下划线分割方便查看例如 var gdp = 10_000 ,跟var gdp = 10000 结果一样
var a = 10
var b = 1
var c = a + b
//在swift3.0中 是两元运算符前后必须加空格要不然报错
15 字符和字符串:
a.字符是单引号包括的值,例如’a’,只能有一个字符
b.字符串是双引号包括的值,例如”abcd”
字符串判断不为空 调用isNotEmpty()方法,长度是count()方法。
判断一个字符是不是数字可以使用方法isDigit()
判断一个字符是不是汉子可以使用方法isLetter()
把字符串转化为字符数组使用方法 toCharArray()
16.集合类型Collection:
a.Array:有序可重复,不可变的,每次操作都是生成新数组
b.Set:无须不可重复
c.Map:无须可重复,键是唯一的
d.mutableListOf:可变,可操作的数组
17.函数: fun 函数名(参数名: 参数类型 = 默认值):返回类型{
}
fun add(first : Int , second : Int): Int {
return first + second
}
可变参数:java中是在参数名前面加 … 例如
public int sum(int ...numbers){
int total = 0;
for(i in number){
total +=i;
}
return total;
}
Ios中可别参数
func sum(input: Int...) -> Int {
return input.reduce(0, combine: +)
}
Kotlin中的可变参数
fun sum (vararg input : Int): Int{
var total = 0
for( i in input){
total +=i
}
return
}
18.面向对象编程:
类定义:class 类名 constructor(属性列表){
更多的属性和方法描述
}
如果一个类想要被继承,必须在class关键字前面添加open关键字 。
创建对象不需要new关键字 直接使用 类名(参数) 即可。
属性如果想被覆盖,父类中的属性必须添加open关键字,子类属性需要添加override.
19 嵌套类:一个类写在了另外一个类中,不可访问主类的属性,创建对象时的格式是 : 主类名.嵌套类名()
内部类 ::一个类写在了另外一个类中,并用 inner关键字修饰,可以访问主类的属性,创建对象的格式是:主类名().内部类名()。
20 数据类:class前面添加关键字 data,数据类可以实现属性的序列化、copy、解构
21 枚举类: class 前面添加关键字 enum,
22 对象声明和表达式:有时候只是要对某个类型进行轻微改造,供临时使用,避免继承。
val 对象名 = object : 父类名(属性){
}
23 异常捕获:
//直接展示错误
try{
"3abc".toInt()
}catch( e : Exception){
println(e)
}
//忽略错误
val a : Int? = try{
"3abc".toInt()
}catch(e : Exception){
null
}
24 类型检查(is)和转换:
val a = 5
val b = 3
val c = if(a > b) "大于" else 1-b
if(c is String) {
println(c.length)
}
if(c !is String) println("正数:$c")
//手动转换: 强制转换as,强制转换失败会崩溃 ,安全转换 as?,安全转换失败返回null