基础语法
变量
val(value简写)声明一个不可变变量。
var(variable的简写)声明一个可变变量。
显式声明变量类型:
val a: Int = 10
JAVA和Kotlin数据类型对应关系
JAVA | Kotlin |
---|
int | Int | long | Long | short | Short | float | Float | double | Double | boolean | Boolean | char | Char | byte | Byte |
函数
fun 函数名(变量名:数据类型....):数据类型(返回值)
{
}
逻辑控制语句
if语句 可作为返回值
if(条件)
{
}
else
{
}
fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) num1 else num2
when语句
fun getScore(name: String) = when (name) {
"Tom" -> 86
"Jim" -> 77
"Jack" -> 95
"Lily" -> 100
else -> 0
}
匹配值 -> { 执行逻辑 }
fun checkNumber(num: Number) {
when (num) {
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("number not support")
}
}
while语句
while(执行条件)
{
}
for循环
for(i in collection)
{
}
fun main() {
for (i in 0 until 10 step 2) {
println(i)
}
}
downto 关键字
fun main() {
for (i in 10 downTo 1) {
println(i)
}
}
类
class 类名{}
val p = 类名()
open class 类名{}
class Student:Person(){}
主构造函数
- 就是默认的无参构造,没有函数体。可以通过init结构体来对其进行一些操作。
init
{
println(".....")
}
次构造函数
class Student(val sno:String,val grade:Int,name:String,age:Int):Person(name,age)
{
constructor(name:String,age:Int):this("",0,name,age){ }
constructor():this("",0){}
}
接口
interface Study
{
fun readBooks()
fun doHomework()
}
class Student(name:String,age:Int):Person(name,age),Study
{
override fun readBooks() {
println("ReadBook......")
}
override fun doHomework() {
println("doHomework.....")
}
}
数据类
在要成为数据类的前面添加data关键字即可使该类成为数据类。
data class Cellphone(val brand:String,val price:Double)
数据类的好处是kotlin会自动根据主构造函数中的参数生成equals、hashCode()、toString()等固定且无实际意义的方法自动生成。
单例类
public class Singleton {
private static Singleton instance;
private Singleton() {}
public synchronized static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
public void singletonTest() {
System.out.println("singletonTest is called.");
}
}
可空类型
类名+? 如:Int? String?
判空辅助工具
- 对象?.函数 对象不为空正常调用方法,为空时什么都不做。
- ?: 左边表达式的结果不为空就返回左边表达式的结果,否则就返回右边表达式的结果。
- !! 强制通过编译,在对象后面加上!! 。
Lambda
一小段可以作为参数传递的代码。
Lambda表达式结构
{参数名1:参数类型,参数名2:参数类型->函数体}
var a = listOf(1,2,3,4,5,6)
a = a.map { it+1 }
for (i in a)
{
print("\t"+i)
}
2 3 4 5 6 7
集合创建与遍历
listOf创建的是一个不可变集合,不能调用添加或者删除方法。
val list = listOf("Apple","Banana","Orange","Pear","Grape")
for (i in list)
{
println(i)
}
类似的如set集合可以使用setOf进行创建,也可以通过可变函数创建mutableSetOf(),以上创建的为可变集合。
特别的,对于Map,因为Map集合是以键值对的形式存在:
val map = mapOf("apple" to 1)
集合函数
maxByOrNull
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val maxLengthFruit = list.maxBy { it.length }
println("max length fruit is " + maxLengthFruit)
map,映射函数,Lambda中指定映射规则。
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val fruit = list.map { it.uppercase(Locale.getDefault()) }
for (i in fruit)
{
println(i)
}
filter ,过滤函数,Lambda中指定过滤规则。
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val fruit = list.filter { it.length<=4 }.map { it.uppercase(Locale.getDefault()) }
for (i in fruit)
{
println(i)
}
any和all any存在满足条件的即返回true all全部满足条件返回true
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val anyResult = list.any{ it.length<=5 }
val allResult = list.all { it.length<=5 }
println("anyResult is $anyResult, allResult is $allResult")
|