Kotlin 代码是不用写分号的。
变量和函数
变量
Kotlin 定义一个变量 只允许在变量前声明两种关键字。val和var
val:用来声明一个不可变的变量,这种变量在初始赋值之后 再也不能重新赋值。对应Java中的final变量。
var: 用来声明一个可变的变量,这种变量在初始赋值之后仍然可以在重新被赋值。对应Java中的非final变量。
val a = 10
print(a)
var b = 10
b = 20
print(b)
// 显示定义数据类型
val c :Int = 11
print(c)
// Kotlin中完全抛弃了Java的基本数据类型。全部使用了对象数据类型
函数
函数定义
fun getLargeNum(param1:Int, param2:Int): Int {
return max(param1,param2)
}
解释:
fun 关键字用来声明函数
getLargeNum 函数名
param1:Int, param2:Int ->参数列表
:Int 定义的函数返回值类型
{} 内是函数体。
------------------------------------------------------------
** 当一个函数中只有一行代码时候,Kotlin可以不必编写函数体,可以直接将唯一的一行代码卸载函数定义的尾部,中间用等号连接
fun getLargeNum(param1:Int, param2:Int): Int {
return max(param1,param2)
}
等同于
fun getLargeNum(param1:Int, param2:Int): Int = max(param1,param2)
使用这种语法 return关键字省略,由于Kotlin的类型推导机制 可以推断出 max(param1,param2)的返回值类型为Int ,所以函数的返回值类型也可以省略。
fun getLargeNum(param1:Int, param2:Int) = max(param1,param2)
逻辑控制
Kotlin条件语句主要有两种实现方式:if和when
if :
fun getLargeNum(num1:Int, num2:Int): Int {
var value = 0
if (num1 > num2) {
value = num1
} else {
value = num2
}
return value
}
Kotlin中if语句是可以有返回值的。 返回值就是if语句每一个条件中最后一行代码的返回值
上面代码等同于
fun getLargeNum(num1:Int, num2:Int) : Int {
var value = if (num1 > num2) {
num1
} else {
num2
}
return value
}
value变量是多余的等同于
fun getLargeNum(num1:Int, num2:Int): Int {
return if (num1 > num2) {
num1
} else {
num2
}
}
又因为 ** 当一个函数中只有一行代码时候,Kotlin可以不必编写函数体,可以直接将唯一的一行代码卸载函数定义的尾部,中间用等号连接 所以代码等同于
fun getLargeNum(num1:Int, num2:Int) = if (num1 > num2) {
num1
} else {
num2
}
when:
when语句类似于Java中的switch语句,when语句是允许传入一个任意类型的参数,然后可以在when的机构体中定义一系列的条件格式如下:
匹配值 -> {执行逻辑} 当逻辑只有一行代码是 {} 可以省略 必须要有else 语句
精确匹配:
fun getScore(name: String) = when(name) {
"Tom" -> 96
"Jerry"-> 80
else -> 60
}
类型匹配 :
fun checkNum(num: Number) = when (num) {
is Int -> "111"
is Double -> "222"
else -> "333"
}
循环语句
kotlin 的循环语句主要有两种 while和for
kotlin表示区间的方式 val range = 0..10 // 表示0到10 两端闭区间 [0,1,2,3,4,5,6,7,8,9,10]
val range = 0 until 10 // 表示0 到 10 前闭后开区间 [0,1,2,3,4,5,6,7,8,9]
for-in 循环可以是有 step 跳过某些元素
使用downTo 降序循环
IDEA创建Kotlin中的File 通常使用用于编写Kotlin顶层函数和扩展函数的
面向对象
1. 如何定义一个类
class User {
var id = 0
var name = ""
var age = 0
fun study () {
print ("study")
}
}
2. 如何创建一个对象(对象是类的一个实例)
fun main(args:Array<String>) {
var person = User()
person.age = 10
person.name = "zxy"
person.id = 1
print("age=${person.age},name=${person.name},id=${person.id}")
}
打印结果如下:
age=10,name=zxy,id=1
继承和构造函数
继承:在Java中一个类是默认可以被继承的,但在Kotlin中任何一个非抽象类默认都是不可以被继承的。相当于Java中的类添加Final关键字。
若让Kotlin中的类可以被继承需要用open关键字来修饰这个类
在Java中类的继承是使用extends关键字。在Kotlin中是使用:
Java中的继承
public class Person() {
}
pubilc class Studnet extends Person {
}
Kotlin 中继承
open class Person() {
}
class Student: Person() {
}
kotlin中的继承父类后面还加一个一对括号
原因是主构造函数和次构造函数
主构造函数和次构造函数
```java
kotlin 将构造函数分为了主构造函数和次构造函数
每个类都会有一个不带参数的主构造函数,主构造函数的特点是没有函数体,直接定义在类名后面即可
ex:
在主构造函数中声明成val或var的参数将自动成为该类的字段。
class User (var name : String, var age : Int) {}
实例化时必须传入构造函数中的所有参数
val user = User("zxy", 26)
Kotlin提供了一个init 结构体 所有主构造函数的逻辑都可以写在里面
Java 继承特性
子类中的构造函数必须调用父类中的构造函数
子类的主构造函数调用父类的哪个构造函数,在继承的时候通过括号来指定
Kotlin规定当一个类中既有次构造函数又有主构造函数时,次构造函数必须调用主构造函数
次构造函数通过constructor来定义
```
单例类、数据类(object data 修饰类)
lambda表达式
标准函数和静态方法。
1. let
let是一个函数,将原始对象作为参数传递到lambda表达式中。
2. with
with函数接受两个参数 第一个参数是可以是一个任意类型的对象,第二个参数是一个lambda表达式,with函数会在lambda表达式中第一个参数作为对象的上下文,使用lambda表达式中的最后一行代码作为返回值返回。
3. run
run函数不能直接调用,必须有一个对象才能被调用,只接受一个参数lambda表达式,调用run函数的对象作为lambda函数的上下文,使用lambda表达式中的最后一行代码作为返回值返回。
4. apply
run函数不能直接调用,必须有一个对象才能被调用,只接受一个参数lambda表达式,调用run函数的对象作为lambda函数的上下文,返回的是调用函数的对象本身(返回一个对象)