Kotlin 基础教程一

Kotlin 基本数据类型
Java | Kotlin
byte Byte
short Short
int Int
long Long
float Float
double Double
boolean Boolean
char Char
数据类型之间可以相互转化 比如
var index = 10 index.toLong,index.toDouble ...等
声明变量一般为 var 赋值变量 val 表示常量
可以显示声明类型:
var name : String = "Csdn"
也可以隐式声明:
var name = "Csdn"
val 修饰的一般为常量 不可改变 例如:
val name = "Android"
name = "Hello" 就会报错
修饰方法 一般为fun 例如:
fun getNumber(index : Int) : Int
getNumber(Index : Int) 代表传入一个Int的值 而函数中 : 后面的则为返回类型
无返回类型一般不用写,也可以写Unit
继承和实现:
Java 继承是extends 而Kotlin就是 :
比如: class A extnds B ,Kotlin则是class A : B ()
实现 Java是implements 而Kotlin 则是 直接实现的类的方法或者其他的属性
Kotlin特性之空安全
比如:private var name : String 这样写是报错的 因为没有初始化 为Null
如果可能需要为null或者避免检验 可以这样写: private var name : String? = null
Java避免空属性可以用注解 @NonNull @Nullable
kotlin中如果声明可为空 也就是 var name : String? = null 调用时会报错
如果强行调用 有两种方式:
安全调用value?.xxx 用?安全调用 为空则不调用
value!!.xxx强行调用,可能会报空指针
(变量后面有感叹号!代表非Kotlin声明的 比如是Java 等)
延迟初始化之 lateinit
lateinit 修饰的不能有初始值
比如 val lateinit name : String
类型判断
如果不确定数据类型 java中则是 instanceof 而Kotlin中则是 is
强制类型转换:
java中则是 A a = (A) value ,kotlin则是 as
获取class
java获取class 比如Main.class, value.getClass
kotlin获取为 Main::class ,获取Java的class 则是 Main::class.java
创建实例:
java中 通过new 创建 调用有参或者无参构造
kotlin中则是直接 类名() 参数 比如Intent, java:new Intent(xx,xx);kotlin Intent(xx,xx)
get/set
kotlin 声明属性时候默认会创建get/set 例如 :
var name : String? = null
get(){
return field
}set(){
field = name
}
构造器
constructor 函数 分为无参数:
constructor(){
}
有参数:
constructor(name : String){
}
@JvmField
如果成员变量中使用@JvmField则生成一个public的成员变量 不会生成get set
类的继承
java 所有的类 默认继承Object
Kotlin 默认 Any (更精简)
java void 对应kotlin Unit
构造器相互调用
单参数调用多参数 使用this(参数1,参数2...)
constructor(context : Context) this(context,null)
数组:
java中通过 []声明一维和二维 比如 int [] xx
kotlin则是 通过 arrayOf 比如 val numberList = arrayOf(1,2,3) 这种写法会自动装箱,造成不必要的内存开支,基本数据类型 比如int 可以使用intArrayOf 比如 val intArr : IntArray = intArrayOf(1,2)
intArrayOf FloatArrayOf 等
数组长度表示:在Java中 数组[ ] 长度表示为length 而Kotlin 则是 size
静态函数
java使用 static
kotlin : 1 定义在函数 比如 fun getMax() 通过导入包调用函数 称为顶级函数 类似于Java XXX.getMax()
object
kotlin 可以通过object 声明一个类,这个类中的变量和函数会变成全局的
并不是静态函数,而是自动创建这个类的单例对象,然后通过单例对象访问这个类
如 object V {} 这里面声明的函数是静态的 可以V.xxx调用,如果在Java中调用v的函数
则需要V.INSTANCE.getXXX()
companion object 静态变量修饰
类中的单利对象 比如 class Rock : A {
companion object{
private lateinit var index : Value?
fun getValue() : Value{
return value
}
}
fun setValue (value : Value){
value = this;
}
}
可以在object声明的函数方法中加入@JvmStatic 声明为静态函数
@file
例如在类的开头:@file:JvmName("xxx") 作用对象为文件
$
简化字符串模板可以省略拼接字符串+ 比如 var name : String = "Key$name"
object : params 等同于创建一个内部类
in
在xx 区间
在Java中表示 if (number > 200 && number < 600)
kotlin if (number in 200..600) 区间范围
when
类似于java的swith 同时支持表达式 比如 if xx else if xx else if xx
可以用when (code ) in 200 -> { } in 300 ->{} else ->{}
接口
也是用interface 定义
抽象
也是用abstract定义,构造器调用父类使用 : super(xxx)
枚举
使用 enum class 定义 (继承Annotation)
使用enum进行定义enum class Type{ A {} abstract fun type()}
fun
用于修饰方法
编译期常量 const
在 companion object{
const val NAME = "name"
}
引用外部对象属性
java 通常是类名.this.变量名
kotlin this@外部类类名.成员以及变量
创建集合
java new ArrayList
kotlin : ArrayList 也可以用 arrayListOf创建 或者 MutableList
listOf / List 不支持修改 MutableList支持修改 -----Map HashMap/MutableMap同理
遍历:
foreach
java : for ()
kotlin in for (value : Value in list)
静态内部类
internal 可进行修饰符,当前模块可见
inner 修饰内部类 但是不能存在compaion object 此对象
kotlin 在普通类和方法中默认是final 修饰的 否则需要用abstract / open /override
相关文章:
Kotlin 基础教程一
Kotlin 基本数据类型 Java | Kotlin byte Byte short Short int Int long Long float Float double Double boolean Boolean c…...
数据结构笔记--前缀树的实现
1--前缀树的实现 前缀树的每一个节点拥有三个成员变量,pass表示有多少个字符串经过该节点,end表示有多少个字符串以该节点结尾,nexts表示该字符串可以走向哪些节点; #include <iostream> #include <unordered_map>str…...
C/C++时间获取函数
time.h包含C/C中用于获取时间,和时间转换方面的函数。 1、time() 函数 time_t time(time_t *seconds) 返回自(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位。如果 seconds 不为空,则返回值也存储在变量 seconds …...
sql中判断日期是否是同一天
sql中判断日期是否是同一天的sql sql: select id,product_id,seckill_price,stock_count,time,intergral,start_date from t_seckill_product where to_days(start_date) to_days(now()) to_days函数: 使用to_days(start_date) to_days(now())的方式是一种常见的…...
NAS搭建指南一——服务器的选择与搭建
一、服务器的选择 有自己的本地的公网 IP 的请跳过此篇文章按需求选择一个云服务器,目的就是为了进行 frp 的搭建,完成内网穿透我选择的是腾讯云服务器,我的配置如下,仅供参考: 4. 腾讯云服务器官网地址 二、服务器…...
豪越HYDO智能运维助力智慧医院信息化建设
随着国家政策的推动与支持,医疗行业信息化应用不断普及,大数据、AI、医疗物联网等技术的应用,快速推动了电子病历、智慧服务、智慧管理的智慧医院建设和医院信息标准化建设,通过不断探索创新“智慧医院”服务模式,实现…...
Week1题目重刷
今天把week1的题目都重新刷了一遍,明天开始week2的内容~ 704.二分查找 class Solution {public int search(int[] nums, int target) {int l 0, r nums.length - 1, m;while (l < r) {m (l r) >>> 1;if (nums[m] < target) {l m 1;} else if…...
考研数据结构:第七章 查找
文章目录 一、查找的基本概念二、顺序查找和折半查找2.1顺序查找2.3折半查找2.3.1算法思想2.3.2代码实现2.3.3查找效率分析2.3.4折半查找判定树的构造2.3.5折半查找效率2.3.6小结 2.4分块查找 三、树形查找3.1二叉排序树3.1.1二叉排序树定义3.1.2查找操作3.1.3插入操作3.1.4二叉…...
【Linux进程篇】环境变量
【Linux进程篇】环境变量 目录 【Linux进程篇】环境变量基本概念常见环境变量查看环境变量方法测试PATH测试HOME测试SHELL和环境变量相关的命令环境变量的组织方式通过代码如何获取环境变量命令行参数命令行第三个参数通过第三方变量environ获取 本地变量通过系统调用获取或设置…...
【软件测试】Linux环境下Docker搭建+Docker搭建MySQL服务(详细)
目录:导读 前言 一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Linux之docker搭…...
去了字节跳动,才知道年薪40W的测试有这么多?
今年大环境不好,内卷的厉害,薪资待遇好的工作机会更是难得。最近脉脉职言区有一条讨论火了: 哪家互联网公司薪资最‘厉害’? 下面的评论多为字节跳动,还炸出了很多年薪40W的测试工程师 我只想问一句,现在的…...
linux0.95(VFS重点)源码通俗解读(施工中)
文件系统在磁盘中的体现 下面是磁盘的内容,其中i节点就是一个inode数组,逻辑块就是数据块可用于存放数据 操作系统通过将磁盘数据读入到内存中指定的缓冲区块来与磁盘交互,对内存中的缓冲区块修改后写回磁盘。 进程(task_struct * task[N…...
mac ssh连接另一台window虚拟机vm
vmware配置端口映射 编辑(E) > 虚拟网络编辑器(N)... > NAT设置(S)... window防火墙,入站规则添加5555端口 控制面板 > 系统和安全 > Windows 防火墙>高级设置>入站规则>新建规则... tips windows查看端口命令:netstat -ano | f…...
使用Python解析通达信本地lday数据结构
通达信软件中的vipdoc是一个存储股票行情数据的文件夹。在通达信软件的安装目录下,可以找到一个名为vipdoc的文件夹,里面存放着各个股票的分时、日线、周线、月线等行情数据文件。这些数据文件可以用于自定义分析和回测股票的走势和交易策略,…...
【Mysql】修改definer
修改definer 本文介绍如何修改MySQL中的function、procedure、event、view和trigger的definer 修改function、procedure的definer 首先,我们需要登录MySQL命令行界面,然后执行以下命令: select definer from mysql.proc;这个命令会列出所…...
图片预览插件vue-photo-preview的使用
移动端项目中需要图片预览的功能,但本身使用mintui,vantui中虽然也有,但是为了一个组件安装这个有点儿多余,就选用了vue-photo-preview插件实现(其实偷懒也不想自己写)。 1、安装 npm i vue-photo-preview…...
最强自动化测试框架Playwright(20)- iframe
一个页面可以附加一个或多个 Frame 对象。每个页面都有一个主框架,并且假定页面级交互(如)在主框架中运行。click frame_locator 使用 iframe 时,可以创建一个框架定位器,该定位器将进入 iframe 并允许选择该 iframe…...
leetcode 516. 最长回文子序列(JAVA)题解
题目链接https://leetcode.cn/problems/longest-palindromic-subsequence/description/?utm_sourceLCUS&utm_mediumip_redirect&utm_campaigntransfer2china 目录 题目描述: 暴力递归: 动态规划: 题目描述: 给你一个…...
在Java中操作Redis(详细-->从环境配置到代码实现)
在Java中操作Redis 文章目录 在Java中操作Redis1、介绍2、Jedis3、Spring Data Redis3.1、对String的操作3.2、对哈希类型数据的操作3.3、对list的操作3.4、对set类型的操作3.5、对 ZSet类型的数据(有序集合)3.6、通用类型的操作 1、介绍 Redis 的Java客…...
分布式作业调度框架——ElasticJob
1、简介 ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,…...
PPT讲解视频怎么做?3种常见方案对比
在做课程、培训或者知识分享时,很多人都会遇到一个问题:👉 如何把PPT变成一个讲解视频?目前主流方案大致可以分为3类,每种方式我都实际体验过,下面给你一个真实对比总结。一、方案一:手动录屏&a…...
SQL中如何使用窗口函数实现Top N推荐系统
用 ROW_NUMBER() 配合 PARTITION BY user_id 获取每个用户的 Top N 推荐最稳妥,RANK() 和 DENSE_RANK() 因处理重复分数会导致条数不可控,如并列第1时 RANK() 跳至第3,易使 WHERE rn ≤ N 漏取或超取。窗口函数怎么写才能拿到每个用户的Top N…...
营销自动化数据驱动 - 多源数据 OLAP 架构演进们
1. 流图:数据的河流 如果把传统的堆叠面积图想象成一块块整齐堆叠的积木,那么流图就像一条蜿蜒流淌的河流,河道的宽窄变化自然流畅,波峰波谷过渡平滑。 它特别适合展示多个类别数据随时间的变化趋势,尤其是当你想强调整…...
OpenClaw定时任务实战:用Phi-3-vision-128k-instruct每日自动生成图文日报
OpenClaw定时任务实战:用Phi-3-vision-128k-instruct每日自动生成图文日报 1. 为什么需要自动化日报系统 每天早晨打开电脑,第一件事就是手动整理前一天的各类数据——项目进度、系统日志、团队协作记录,然后花半小时拼凑成一份图文并茂的日…...
AI+电磁:当计算电磁学遇上人工智能,一场效率革命正在发生
AI电磁:当计算电磁学遇上人工智能,一场效率革命正在发生 引言 在6G通信、新能源汽车与高端芯片设计等领域,电磁仿真已成为不可或缺的“数字试验场”。然而,传统基于有限元(FEM)、时域有限差分(…...
SecGPT-14B私有化部署:企业内网安全使用OpenClaw的方案
SecGPT-14B私有化部署:企业内网安全使用OpenClaw的方案 1. 为什么需要内网专属AI助手 去年我在某金融机构参与了一个敏感项目,客户要求所有数据处理必须在隔离网络中完成。当我第一次尝试用公有云API调用AI能力时,安全团队立即叫停了整个流…...
如何处理死锁异常_ORA-00060捕获与重试机制设计
ORA-00060是死锁,非单纯竞争;Oracle检测到多个会话互持对方所需锁并主动回滚其中一个事务,需通过trace文件分析Deadlock graph定位具体行锁冲突及session,不可盲目重试。ORA-00060 是死锁还是竞争?先看日志里真正冲突的…...
C/C++头文件防护:#pragma once原理与实践
1. #pragma once 的基本概念与作用在C/C项目开发中,头文件包含管理是个看似简单却暗藏玄机的问题。我第一次意识到它的重要性是在参与一个跨平台嵌入式项目时,某个模块因为头文件重复包含导致的结构体重定义错误,让整个团队排查了整整两天。而…...
四座小水库的“智能体检”:广州创科大亚湾安全监测项目纪实
在惠州鱿鱼湾、龙尾山、格木洞、畲禾坑四座水库,如同镶嵌在群山之间的明珠,守护着下游的城镇与工业区。它们大多建于上世纪六七十年代,服役已超半个世纪。2023年冬,一场以“除险加固智慧监测”为核心的维修加固工程正式拉开帷幕。…...
500行代码还原儿时经典 Python Pygame 制作带 AI 决策的飞行棋
1. 前言 飞行棋(Aeroplane Chess)是许多人童年的回忆。今天,我们将使用 Python 的 Pygame 库,从零开始构建一个完整的飞行棋游戏。 这不仅仅是一个简单的绘图程序,它包含了完整的游戏逻辑状态机、一维路径坐标映射&am…...
