当前位置: 首页 > news >正文

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--前缀树的实现 前缀树的每一个节点拥有三个成员变量&#xff0c;pass表示有多少个字符串经过该节点&#xff0c;end表示有多少个字符串以该节点结尾&#xff0c;nexts表示该字符串可以走向哪些节点&#xff1b; #include <iostream> #include <unordered_map>str…...

C/C++时间获取函数

time.h包含C/C中用于获取时间&#xff0c;和时间转换方面的函数。 1、time() 函数 time_t time(time_t *seconds) 返回自&#xff08;1970-01-01 00:00:00 UTC&#xff09;起经过的时间&#xff0c;以秒为单位。如果 seconds 不为空&#xff0c;则返回值也存储在变量 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函数&#xff1a; 使用to_days(start_date) to_days(now())的方式是一种常见的…...

NAS搭建指南一——服务器的选择与搭建

一、服务器的选择 有自己的本地的公网 IP 的请跳过此篇文章按需求选择一个云服务器&#xff0c;目的就是为了进行 frp 的搭建&#xff0c;完成内网穿透我选择的是腾讯云服务器&#xff0c;我的配置如下&#xff0c;仅供参考&#xff1a; 4. 腾讯云服务器官网地址 二、服务器…...

豪越HYDO智能运维助力智慧医院信息化建设

随着国家政策的推动与支持&#xff0c;医疗行业信息化应用不断普及&#xff0c;大数据、AI、医疗物联网等技术的应用&#xff0c;快速推动了电子病历、智慧服务、智慧管理的智慧医院建设和医院信息标准化建设&#xff0c;通过不断探索创新“智慧医院”服务模式&#xff0c;实现…...

Week1题目重刷

今天把week1的题目都重新刷了一遍&#xff0c;明天开始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服务(详细)

目录&#xff1a;导读 前言 一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Linux之docker搭…...

去了字节跳动,才知道年薪40W的测试有这么多?

今年大环境不好&#xff0c;内卷的厉害&#xff0c;薪资待遇好的工作机会更是难得。最近脉脉职言区有一条讨论火了&#xff1a; 哪家互联网公司薪资最‘厉害’&#xff1f; 下面的评论多为字节跳动&#xff0c;还炸出了很多年薪40W的测试工程师 我只想问一句&#xff0c;现在的…...

linux0.95(VFS重点)源码通俗解读(施工中)

文件系统在磁盘中的体现 下面是磁盘的内容&#xff0c;其中i节点就是一个inode数组&#xff0c;逻辑块就是数据块可用于存放数据 操作系统通过将磁盘数据读入到内存中指定的缓冲区块来与磁盘交互&#xff0c;对内存中的缓冲区块修改后写回磁盘。 进程(task_struct * task[N…...

mac ssh连接另一台window虚拟机vm

vmware配置端口映射 编辑(E) > 虚拟网络编辑器(N)... > NAT设置(S)... window防火墙&#xff0c;入站规则添加5555端口 控制面板 > 系统和安全 > Windows 防火墙>高级设置>入站规则>新建规则... tips windows查看端口命令&#xff1a;netstat -ano | f…...

使用Python解析通达信本地lday数据结构

通达信软件中的vipdoc是一个存储股票行情数据的文件夹。在通达信软件的安装目录下&#xff0c;可以找到一个名为vipdoc的文件夹&#xff0c;里面存放着各个股票的分时、日线、周线、月线等行情数据文件。这些数据文件可以用于自定义分析和回测股票的走势和交易策略&#xff0c;…...

【Mysql】修改definer

修改definer 本文介绍如何修改MySQL中的function、procedure、event、view和trigger的definer 修改function、procedure的definer 首先&#xff0c;我们需要登录MySQL命令行界面&#xff0c;然后执行以下命令&#xff1a; select definer from mysql.proc;这个命令会列出所…...

图片预览插件vue-photo-preview的使用

移动端项目中需要图片预览的功能&#xff0c;但本身使用mintui&#xff0c;vantui中虽然也有&#xff0c;但是为了一个组件安装这个有点儿多余&#xff0c;就选用了vue-photo-preview插件实现&#xff08;其实偷懒也不想自己写&#xff09;。 1、安装 npm i vue-photo-preview…...

最强自动化测试框架Playwright(20)- iframe

一个页面可以附加一个或多个 Frame 对象。每个页面都有一个主框架&#xff0c;并且假定页面级交互&#xff08;如&#xff09;在主框架中运行。click frame_locator 使用 iframe 时&#xff0c;可以创建一个框架定位器&#xff0c;该定位器将进入 iframe 并允许选择该 iframe…...

leetcode 516. 最长回文子序列(JAVA)题解

题目链接https://leetcode.cn/problems/longest-palindromic-subsequence/description/?utm_sourceLCUS&utm_mediumip_redirect&utm_campaigntransfer2china 目录 题目描述&#xff1a; 暴力递归&#xff1a; 动态规划&#xff1a; 题目描述&#xff1a; 给你一个…...

在Java中操作Redis(详细-->从环境配置到代码实现)

在Java中操作Redis 文章目录 在Java中操作Redis1、介绍2、Jedis3、Spring Data Redis3.1、对String的操作3.2、对哈希类型数据的操作3.3、对list的操作3.4、对set类型的操作3.5、对 ZSet类型的数据&#xff08;有序集合&#xff09;3.6、通用类型的操作 1、介绍 Redis 的Java客…...

分布式作业调度框架——ElasticJob

1、简介 ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案&#xff0c;由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能&#xff0c;打造一个适用于互联网场景的分布式调度解决方案&#xff0c;…...

OpenClaw容器化部署:Docker打包Kimi-VL-A3B-Thinking多模态服务的完整流程

OpenClaw容器化部署&#xff1a;Docker打包Kimi-VL-A3B-Thinking多模态服务的完整流程 1. 为什么选择容器化部署OpenClaw 去年我在本地尝试部署OpenClaw对接Kimi-VL多模态模型时&#xff0c;经历了整整三天的依赖地狱。不同版本的CUDA驱动、Python包冲突、系统库缺失等问题让…...

二极管保护电路设计与应用指南

1. 项目概述&#xff1a;二极管保护电路的必要性 在电子电路实验中&#xff0c;线圈类负载&#xff08;如继电器、电磁阀、电机绕组&#xff09;突然断电时产生的反向电动势&#xff0c;一直是工程师们头疼的问题。这种瞬间高压轻则导致触点火花缩短器件寿命&#xff0c;重则直…...

OpenClaw安全方案:Qwen3.5-9B本地化处理敏感图片数据

OpenClaw安全方案&#xff1a;Qwen3.5-9B本地化处理敏感图片数据 1. 为什么需要本地化处理敏感图片 去年我接手了一个财务单据自动归档项目&#xff0c;最初尝试使用某知名云OCR服务。当我把包含客户身份证号的发票扫描件上传到云端时&#xff0c;突然意识到一个严重问题&…...

基于前述双系统安装与切换遇到的问题

一、 引导管理类问题 这类问题是双系统环境中最常见且最影响使用的核心故障。 1. GRUB菜单丢失&#xff0c;开机直接进入Windows 问题现象&#xff1a;安装Kali后首次重启或Windows系统更新后&#xff0c;GRUB引导菜单消失&#xff0c;计算机直接启动至Windows。根本原因&am…...

如何把PV数据录入从“人肉战场“变成了全自动流水线

去年Q2,我们的药物警戒(Pharmacovigilance,PV)团队在做年度复盘,有人做了一张饼图。 整个部门的工时分布:62%在录入数据,18%在核查录入的数据,只有20%在做真正的信号检测和风险分析。 这张图在会议室里沉默了很久。 我们公司同时跑着三十几个临床项目&#xff0c;光是SUSAR(Sus…...

LeetCode 删除无效的括号:python 题解匆

这个代码的核心功能是&#xff1a;基于输入词的长度动态选择反义词示例&#xff0c;并调用大模型生成反义词&#xff0c;体现了 “动态少样本提示&#xff08;Dynamic Few-Shot Prompting&#xff09;” 与 “上下文长度感知的示例选择” 的能力。 from langchain.prompts impo…...

Pretext:值得关注的文本排版引擎依

一、语言特性&#xff1a;Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一&#xff0c;就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全面支…...

炸裂!昔日神话Sora惨遭抛弃,AI泡沫真的要碎了吗?

当初奥特曼&#xff08;Sam Altman&#xff09;在 2024 年底放出 Sora 的时候&#xff0c;全网简直像开了锅一样。 那时候&#xff0c;谁要是敢说半个“不”字&#xff0c;分分钟被那群科技狂热分子喷成筛子。 大家看着那堆其实并不怎么真实、甚至透着股子“恐怖谷”味道的 20 …...

Linux内核中的中断处理机制详解

Linux内核中的中断处理机制详解 引言 中断处理机制是Linux内核中负责处理硬件中断的核心组件&#xff0c;它确保硬件设备能够及时通知内核发生的事件&#xff0c;从而实现设备与操作系统的高效交互。Linux内核的中断处理机制支持多种中断类型&#xff0c;包括外部中断、内部中断…...

Seeed-PCA9685 Arduino库详解:16路PWM伺服与LED控制

1. 项目概述Seeed-PCA9685 是一款面向 Arduino 平台的开源驱动库&#xff0c;专为基于 NXP PCA9685 芯片的 16 通道 PWM 控制模块设计。该库直接封装了 PCA9685 的 IC 协议层与寄存器操作逻辑&#xff0c;屏蔽底层时序细节&#xff0c;使开发者能够以高级语义&#xff08;如set…...