Kotlin语言介绍
Kotlin是JetBrains公司开发的一个语言,具有以下特性。
- Kotlin是一门独立的编程语言,拥有自己的编译器,可以应用于多方面的编程,现在多用于移动端开发,其实也可用于服务端开发及其他Java运行的地方。
- Kotlin是一门面向对象的编程语言。
- Kotlin能够于Java语言100%的兼容。
- Kotlin在安全方面下了很大的功夫,几乎杜绝了空指针异常。
- 同Java一样,Kotlin是一种静态类型的语言,所有的表达式的类型在编译器已经确定了。
- 支持函数式编程方式。
- 免费开源。
Kotlin运行方式
1、使用IntelliJ IDEA。这是JetBrains旗下的产品,能够很好的支持Kotlin语言。
2、使用在线网址运行Kotlin代码:https://play.kotlinlang.org/。
3、使用Android Studio。但是该IDE只支持创建Android项目,不支持创建Kotlin项目。现在Kotlin语言被广泛的应用于android开发,并被推荐称为官方开发语言,使用Android Studio结合Kotlin语言开发移动端应用是Kotlin应用最多的场景。
变量和数据类型
Kotlin中只有两种变量声明关键字:val和var。
- val:声明一个不可变类型的变量,在第一次赋值之后不能重新赋值
- var:声明一个可变类型的变量,能被重新赋值
验证var与val的区别,考虑以下代码:
val a = 10 a = a + 1
讯享网
此时,第二行语句会提示一个编译错误“Val cannot be reassigned”,val类型的变量不能够被重新分配,这里验证了val变量的不可变类型,它相当于Java语言中的final关键字修饰的变量,第一次赋值后不可改变。对于val和var的使用,永远是优先使用val类型的,当变量确实需要改变的时候,再将其改成var类型。
Kotlin语言和Java一样是一种静态类型的语言,这意味着所有表达式的类型在编译期已经确定了,包括变方法和字段引用。但是只有两种声明变量的关键字,那么又是怎么实现变量有确定类型的呢?Kotlin拥有出色的类型推导机制,能够推导出正确的数据类型。
讯享网fun main() {
val a = 10 println("a = " + a) }
val a : Int a = 10
变量a并未在声明的时候重新赋值,而是在延迟赋值,此时直接写val a是不合法的。会提示“This variable must either have a type annotation or be initialized”,该变量必须规定一个类型或进行初始化。所以这里需要进行显示的指示变量的类型。
函数
讯享网fun 函数名(参数名:参数类型 ...) : 返回值类型 例子: fun getLargeNumber(num1:Int, num2:Int) : Int {
return max(num1, num2) }
函数使用fun关键字进行定义,返回值写在最后。
fun getLargeNumber(num1:Int, num2:Int) : Int = max(num1, num2)
当函数中的代码只有一行时,可以允许不必编写函数体,直接等式连接。
程序逻辑控制
条件语句
1、if
与其他语言的if使用方法相同,搭配else一起使用。
讯享网fun getLargeNumber(num1: Int, num2: Int): Int {
var value = 0 if (num1 > num2) {
value = num1 } else {
value = num2 } return value }
但是也有不同的地方,Kotlin语言中的if语句是一个表达式,他可以作为返回值直接返回。
fun getLargeNumber(num1: Int, num2: Int): Int {
var value = if (num1 > num2) {
num1 } else {
num2 } return value }
如果函数中只有if,可以用一行进行返回
讯享网fun getLargeNumber(num1: Int, num2: Int): Int = if(num1 > num2) num1 else num2
2、when
当if分支很多时,在Java中可以使用switch语句,但是switch有局限性,只能支持整型或短于整型和字符串类型的。when语句有点类似于switch语句,但是比switch语句强大得多。
when(参数) {
匹配值 -> {
执行逻辑} ... }
需要注意的是,when语句也是有返回值的。除此之外,when语句还允许进行类型匹配。
讯享网fun checkNumber(num: Number) {
when (num) {
is Int -> println("number is Int") is Double -> println("number is Double") else -> println("number not support") } }
循环语句
val range = 0..10
该区间表示的是一个闭区间。除此之外,还可以是用关键字来创建单闭区间和跳过元素。
- until关键字
讯享网val range = 0 until 10
until关键字创建一个左闭右开的区间
- step
for (i in 0 until 10 step 2) {
...}
使用step可以跳过一些元素。
- downTo
讯享网for (i in 10 downTo 1) {
...}
上面的都是升序的空间,可以使用downTo关键字创建一个降序的空间。
面向对象编程
Kotlin是一门面向对象编程的语言,也存在类、对象、多态等概念。
类与对象
class Person {
var name = "" var age = 0 }
使用class关键字创建一个类。
讯享网val p = Person()
需要注意的是,Kotlin中创建对象不需要像Java中使用new关键字。
继承与构造函数
在Kotlin中任何一个非抽象类默认是不可以被继承的,相当于Java中被申明为final的类。如果想要继承一个类,那么父类需要使用open关键字进行修饰。
open class Person{
}
此时,Person类就可以被继承了
讯享网class Student : Person() {
... }
- 主构造函数
每个类都默认有一个无参的主构造函数,也可以指定参数。主构造函数的特点是没有函数体,直接定义在类名后面。
class Student(val sno: String, val grade: Int) : Person() {
...}
讯享网class Student(val sno: String, val grade: Int) : Person() {
init {
... } }
- 次构造函数
当一个类既有主构造函数,也有次构造函数时,所有的次构造函数必须调用主构造函数(包括间接调用)。
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) {
} }
次构造函数使用constructor关键字定义,这里通过this关键字调用自己的主构造函数。第二个次构造函数通过调用第一个次构造函数也间接的调用了主构造函数。
注意事项:
- 子类的构造函数必须调用父类的构造函数
- 子类的主构造函数调用父类的哪个构造函数,在继承的时候通过括号来指定
- 子类在继承的时候构造函数中如果有与父类相同的字段,不能加val或var关键字修饰,否则会编译报错,因为会和父类中的相同字段冲突
- 一个类只有一个主构造函数,可以有多个次构造函数
- 有主构造函数和次构造函数,次构造函数必须电泳主构造函数
- 如果没有显式定义主构造函数,但是却定义了次构造函数,那么该类就只有次构造函数而没有主构造函数
接口
Kotlin接口和Java的接口几乎完全一致,使用interface进行修饰。
讯享网interface Study {
fun readBooks() fun doHomework() }
函数修饰符
Java中有四种方法修饰符,Kotlin中也有四种函数修饰符。public、private、protected和internal。private也是只对当前类可见,public也是对所有类可见,但是不同的是,在Kotlin中,public修饰符是默认修饰符,而在Java中default是默认修饰符。protected在Java中对当前类、子类和同包可见,而Kotlin中只表示当前类和子类可见。Kotlin中没有default,internal表示同一模块可见。
数据类和单例类
在Java中,数据类和单例类是常写的类类型。
1、单例类
单例是一种设计模式,在Java中需要自己去实现,有多种实现方式。而在Kotlin中创建单例类极其简单,只需要将class关键字换成object关键字,此时该类就只能有一个对象存在。
object Singleton {
fun SingletonTest(){
...} }
单例类的调用类似于Java中的静态方法调用
讯享网Singleton.SingletonTest()
2、数据类
数据类通常占据着重要的角色,用于将服务器端或数据库中的数据映射到内存中,为编程逻辑提供数据模型的支持。像MVC、MVP等架构中的M通常就指数据类。
数据类通常需要重写equals、hashCode、toString这几个方法。其中equals方法用于判断两个数据类是否相等。hashCode方法作为equals的配套方法,也需要一并改写,否则HashMap、HashSet等hash相关的类无法正常工作。
数据类使用data进行修饰
data class CellPhone(val brand: String, val price: Double)
Kotlin会根据主构造函数中的参数帮你将equals、hashCode、toString等固定的方法进行自动生成。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/12547.html