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

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

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

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