Kotlin快速入门

文章目录

1.变量和函数

1.1 变量

val用来声明一个不可变的变量,对应java中的final

var用来声明一个可变的变量

每一行代码的结尾不用加分号

自动推导变量的类型val a = 10,但是在延迟赋值的时候,需要显示声明变量类型:val a :Int = 10

在Kotlin中,延迟赋值通常是通过使用 lazy 委托属性来实现的。lazy 委托属性允许你延迟一个值的初始化,直到第一次访问该属性时才进行计算。这对于那些计算开销较大或依赖于某些初始化步骤完成后才可获得的属性特别有用。

Kotlin没有基本数据类型,全部使用对象数据类型

1.2 函数

kotlin 复制代码
fun methodName(param1:Int,param2:Int):Int{
	return 0;
}

2.程序的逻辑控制

2.1 if条件语句

if相比于java有一个额外的功能,它可以有返回值,返回值是if语句每一个条件中最后一行代码的返回值

传统的写法:

kotlin 复制代码
fun largerNumber(num1:Int,num2:Int):Int{
	var value = 0
	if(num1 > num2){
		value = num1
	}else{	
		value = num2
	}
return value
}

if语句中返回value

kotlin 复制代码
fun largeNumber(num1:Int,num2:Int):Int{
	val value = if(num1 > num2){
		num1
	}else{
		num2
	}
	return value
}

继续精简

kotlin 复制代码
fun largeNumber(num1:Int,num2:Int):Int{
	return if(num1 > num2){
		num1
	}else{
		num2
	}
}

语法糖:当一个函数只有一行代码时,可以省略函数体部分,直接将这一行代码使用等号串联在函数定义的尾部

kotlin 复制代码
fun largeNumber(num1:Int,num2:Int) = if(num1 > num2) num1 else num2

太优雅了~

2.1 when条件语句

Kotlin中的when语句有点类似于java中的Switch语句。when相对于java中的Switch增强:

  • when允许传入一个任意类型的参数,when的结构体中定义了一系列的条件

    匹配值 -> {执行逻辑} 只有一行代码时,{}可以省略

  • 支持类型匹配

    is相当于java中的instanceof关键字

kotlin 复制代码
fun checkNumber(num:Number){
	when(num){
		is Int -> println("..")
		is Double -> println("...")
		else -> println("....")
	}
}

Kotlin中判断字符串或者对象相等可以直接使用 == 关键字

2.2for循环

  • 舍弃了for-i循环,使用for-in循环
  • 区间概念 val range= 0..10 等价于[0,10], ...是创建区间的关键字
kotlin 复制代码
fun main(){
	for(i in 0..10){
		println(i)
	}
}
  • 用单端闭区间多,尤其是左闭右开区间,int[10] 实际上区间范围是0到9。
  • Kotlin使用until关键字来创建一个左闭右开的区间 val range = 0 until 10
  • step关键字,循环中每次循环后i自增的大小
  • 降序区间使用downTo关键字 for(i in downTo 1) 创建了[10,1]的降序区间

3 类与对象

  • 实例化对象不需要new关键字
  • Kotlin中任何一个非抽象类默认都是不可以被继承的,相当于java中给类声明了final关键字
  • open关键字使得类可以被继承
kotlin 复制代码
open class Person{
	...
}
  • 继承关键字是一个:,而不思extends;父类后面还要加上一对括号。下方代码是student类继承了Person类
kotlin 复制代码
class Student:Person(){
	var sno = ""
	var grade = 0
}

3.1构造函数

  • 主构造函数,默认不带参数,也可以显式的指明参数。特点是没有函数体,直接定义在类名后面即可,如下方代码所示,实例化student对象的时候,必须传入构造函数当中要求的所有参数
kotlin 复制代码
class student(val sno:String,val grade:Int):Person(){} 

这个时候想要在主构造函数中编写一些逻辑,的init结构体中进行编写。在这Person后的括号可以理解为调用父类的构造函数

kotlin 复制代码
class student(val sno:String,val grade:Int):Person(){
	init{
		println("sno is" + sno)
	}
} 

注意:当父子类都显示了声明了主构造函数,子类的构造函数中要传入父类的字段,但是不能加val或者var,子Kotlin中,在主构造函数声明val或者var的参数将自动变成该类的字段,这就会导致和父类同名的字段造成冲突。

  • 次构造函数
    通过constructor关键字来定义
kotlin 复制代码
class student(val sno:String,val grade:Int):Person(){
	constructor(name:String,age:Int):this("",0,name,age){
	}
	constructor():this("",0){
	}
} 

3.2 java和Kotlin函数可见性修饰符对照表

private和public的范围一致,其他三个有区别

4.数据类与单例类

4.1数据类

在Kotlin中实现Model相对于Java简单很多,在包->new->kotlin file/class ,在弹出的对话框中选择"Data" (基于Android14)

下面这行代码就能表示Model类

kotlin 复制代码
data class hello(var brand:String)

4.2单例类

5 Lambda编程

5.1 listof()函数

用于向List集合中添加数据,下方代码创建了List类型的集合

kotlin 复制代码
var list = listOf("Apple","Banana","Orange");

注意:listOf()函数创建的是一个不可变的集合,该集合只能用于读取,我们无法对集合进行添加,修改和删除操作。

  • 可变集合的创建
kotlin 复制代码
val list = mutableListOf("Apple","Banana","Orange","Pear","Grape")

5.2 SetOf()

5.3Map集合

kotlin 复制代码
   fun hello(){
        val map = HashMap<String,Int>()
        map["apple"] = 1;
        map["banana"] = 2;
        
        val m = mapOf("apple" to  1,"banana" to 2);
    }

5.4 集合的函数式API

  • Lambda的定义:一小段可以作为参数传递的代码
  • 语法结构
  • {参数名1:参数类型,参数名2:参数类型->函数体}

5.4 可空类型系统

  • Int?表示可空的整形,String?表示可空的字符串。Int表示不可为空的整形
  • 判空辅助工具 ?:,这个操作符的左右两边都接收一个表达式,如果左边表达式的结果不为空就返回左边的表达式的结果,否则就返回右边表达式的结果。

6.Kotlin转换为Java

相关推荐
Milk夜雨5 分钟前
头歌实训数据结构与算法-二叉树及其应用(第9关:二叉树的顺序存储及基本操作)
开发语言·数据结构·数据库·c++·算法
xing.yu.CTF7 分钟前
python的urllib模块和http模块
开发语言·python·http
Want59534 分钟前
Python跨年烟花
开发语言·python·pygame
百年孤独_35 分钟前
Python:爬虫基础《爬取红楼梦》
开发语言·爬虫·python
_半夏曲37 分钟前
工厂+策略模式之最佳实践(疾病报卡维护模块API设计)
java·开发语言·设计模式
yqcoder1 小时前
html 中前缀的 data-开头的元素属性是什么
开发语言·前端·javascript
沉默的八哥1 小时前
Python学习路线
开发语言·python·学习
m0_748244962 小时前
Rust 图形界面开发——使用 GTK 创建跨平台 GUI
开发语言·后端·rust
Pandaconda2 小时前
【Golang 面试题】每日 3 题(七)
开发语言·笔记·后端·面试·职场和发展·golang·go
ac-er88882 小时前
Go 原子操作
开发语言·数据库·golang