当前位置: 首页 > 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;…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...