首先推荐一个使用与Android开发者学习kotlin的教程点击进入github阅读
- 基本数据
var : 是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和java中声明变量的方式一样。
val: 是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。 - 数字类型中不会自动转型:
val i:Int=7 //定义一个变量
val d: Double = i.toDouble() - 字符(Char)不能直接作为一个数字来处理。在需要时我们需要把他们转换为 一个数字:
val c:Char=‘c’
val i: Int = c.toInt() //将c转化成int类型 - 位运算也有一点不同。在Android中,我们经常在 flags 中使用“或”,所以我 使用"and"和"or来举例:
// Java
int bitwiseOr = FLAG1 | FLAG2;
int bitwiseAnd = FLAG1 & FLAG2;
//Kotlin
val bitwiseOr = FLAG1 or FLAG2 val
bitwiseAnd = FLAG1 and FLAG2
- 定义一个类
如何定义一个类,使用关键字:class
如果需要只需要在类名后面加上参数,如果这个类什么都没有,可以省区大括号:
//如何类没有内容,那么就不用大括号,如果这个类需要被继承,那么需要声明open
//(var name: String, var age: Int, var sex: String) 为这个类的构造方法
open class Person(var name: String, var age: Int, var sex: String)
例如
- 如何继承一个类,所有类都默认继承Any(相当于java中的object 类),我们可以继承其他类,所有类都默认不可以继承,除非它声明open或者abstract。
- 函数:如果一个函数你没有定义它的返回值,那么它默认返回Unit,与java的void类似,但是Unit是一个对象,函数的返回值也可以指定其他类型。
函数的返回结果也可以用一个表达式表示出来。例如,下面两个函数的结果是一样的
fun add(x: Int, y: Int) : Int { return x + y }
fun add(x: Int,y: Int) : Int = x + y匿名函数:
//需要用一个变量来接收这个函数
var sum = fun(x: Int, y: Int) = x + y
println(sum(1, 2))
kotlin的方法的参数和java不一样,kotlin先写参数名,再定义参数类型。例如上面的例子,定义返回类型也是方法后面后面加 :类型
- 类的属性:在java中,属性可以通过getter和setter
继承:
Anko是一个强大的类库,主要目的是用来代替以前XML的方式来使用代码生成UI布局,类似于Java的黄油刀
比较运算符:
==:比较的是值 相当于java的equals
===:比较的是引用和值,判断两个对象是否引用的同一个
拼接字符串
val a: Int = 5
val b: Int = 6
println("打印信息$a+$b=${a + b}") //输出结果:5+6=11
“”" :三个引号表示将字符串原封不动的内容打印出来
val a: String = """
_(\_/)
,((((^`\
(((( (6 \
,((((( , \
,,,_ ,((((( /"._ ,`,
((((\\ ,... ,(((( / `-.-'
))) ;' `"'"'""(((( (
((( / ((( \
)) | |
(( | . ' |
)) \ _ ' `t ,.')
( | y;- -,-""'"-.\ \/
) / ./ ) / `\ \
|./ ( ( / /'
|| \\ //'|
|| \\ _//'||
|| )) |_/ ||
\_\ |_/ ||
`'" \_\
`'"
"""
println("打印出结果:$a")
空类型
// ?问号表示可能返回空,如果返回空则返回null,不会抛异常
fun getNull(): String? {
return null
}
fun test() {
// ?.表示可能为空,如果为空,则返回null,如果不为空则为length
println(getNull()?.length)
// !!. 代表我表示getNull的值肯定不为空,放心用吧,但是如果为空就会抛异常
println(getNull()!!.length)
}
智能转换
val person = Person(name, age, sex)
//is相当于java的instanceof
if (person is WoMan) {
println(person.testThressMark())
}
//as表示将Person强制转化为WoMan,如果转化失败则抛异常
val person: WoMan = Person(name, age, sex) as WoMan
// 加?表示如果如果Person转化为WoMan失败,则返回空,不抛异常
val person: WoMan ?= Person(name, age, sex) as? WoMan