当前位置: 首页 > 编程日记 > 正文

Kotlin学习笔记-基础语法

去年学习过一遍Kotlin,相比java而言,Kotlin确实有许多方便的地方,但是学习之后一直没有真正拿来写项目,很久不用很多东西都已经忘记了。最近Google宣布Kotlin成为Android开发的官方语言之后,Kotlin突然变得火热起来,我也打算复习一遍Kotlin的语法(主要是和java不同的地方)并用笔记记录下来。

  • 基本数据类型 数值类型
TypeByteShortIntLongFloatDouble
Bit Width81632643264

字面常量

十进制:123 长整型以大写的 L 结尾:123L 16 进制以 0x 开头:0x0F 2 进制以 0b 开头:0b00001011 注意:8进制不支持 Kotlin 同时也支持传统符号表示的浮点数值: Doubles 默认写法: 123.5, 123.5e10 Floats 使用 f 或者 F 后缀:123.5f

可以使用下划线使数字常量更易读:

val oneMillion = 1_000_000 val creditCardNumber = 1234_5678_9012_3456L val socialSecurityNumber = 999_99_9999L val hexBytes = 0xFF_EC_DE_5E val bytes = 0b11010010_01101001_10010100_10010010

Boolean 类型:truefalse

  • ** ===和==** 在 Kotlin 中,三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小。
  • 位运算 kotlin
var andResult  = a and b
var orResult   = a or b
var  xorResult  = a xor b
var rightShift = a shr 2
var leftShift  = a shl 2
复制代码

java

int andResult  = a & b;
int orResult   = a | b;
int xorResult  = a ^ b;
int rightShift = a >> 2;
int leftShift  = a << 2;
复制代码
  • 变量var和常量val
var a = "a"
var b = 1
var c: Int = 1
val d: Int = 1// 常量,相当于java中的final,创建的时候必须初始化
复制代码
  • 方法 没有返回值
fun foo(x: Int, y: Int) {}
复制代码

带有返回值

fun foo(x: Int, y: Int): Int {return x + y
}
复制代码

默认参数

fun foo(x: Int = 1, y: Int = 2): Int {return x + y
}
复制代码
  • 扩展 Kotlin 的扩展是指在不使用继承的方式下对一个类的方法和属性进行扩展,被扩展的类代码本身不会造成任何影响。
    1. 扩展函数,为ImageView扩展loadImage方法:
fun ImageView.loadImage(url: String) {Glide.with(this.context).load(url).into(this)
}
复制代码
  1. 扩展属性 扩展并不会真正给类添加了成员属性,因此也没有办法让扩展属性拥有一个备份字段.这也是为什么初始化函数不允许有扩展属性。扩展属性只能够通过明确提供 getter 和 setter方法来进行定义
var ImageView.index: Intset(value) {tag = value}get() = tag as Int
复制代码
val ImageView.area: Intget() = width * height
复制代码
  1. 扩展的作用域: 扩展的作用域限于当前package,不同package的扩展可以通过import导入使用
  • Lambda表达式
 textView.setOnClickListener { v -> Toast.makeText(v.context, "onClick", Toast.LENGTH_SHORT).show() }
复制代码
val sum: (Int, Int) -> Int = { x, y -> x + y }
sum(1,2)
复制代码
  • Null指针
var p: Person? = null
var name = p!!.name //p为null抛出NullPointerException 
var age = p?.age//p不为null才会为age赋值
复制代码
  • 字符串 Kotlin 支持三个引号 """ 扩起来的字符串
//输出结果会保留换行
val text = """javakotlingroovy"""
复制代码
//删除每行前面的空格
val text = """|java|kotlin|groovy""".trimMargin()
复制代码
  • 字符串模板
var name = "Katy Perry"
var age = "12"
var str = "My name is: $name,My age is $age"
var firstName = "My name is: ${name.substring(4)}"
复制代码
  • When语句 when语句相当于java中的switch语句
when (any) {is String ->return "string"is Int ->return "Int"is Boolean ->return "Boolean"else-> return "other"
}
复制代码
  • 控制语句返回值 if else
var a = if (x > y) x else y
var b = if (x > y) x else if (x < y) y else 0
复制代码

when

val result = when (any) {is String ->"string"is Int ->"Int"is Boolean ->"Boolean"else-> "other"
}
复制代码
  • is Kotlin
if (x is Int) {}
复制代码

java

if(x instanceof Integer){ }
复制代码
  • as kotlin
 val s = a as?  String
复制代码

类型转换的时候可能会抛出ClassCastException,在kotlin中可以使用as?,转换失败返回null,而不是抛出异常 java

String text = (String) a;
复制代码
  • in
if (x in 0..10) {}
for (i in 0..10) {}
复制代码
  • Collections kotlin
var numbers = listOf(1, 2, 3)
var map = mapOf(1 to "One",2 to "Two",3 to "Three")
复制代码

java

List<Integer> numbers = Arrays.asList(1, 2, 3);
Map<Integer, String> map = new HashMap<>();
map.put(1,"One");
map.put(2,"Two");
map.put(3,"Three");
复制代码

kotlin

numbers.forEach {println(it)
}
numbers.filter  { it > 5 }.forEach { println(it) }
复制代码

java

for (int number : numbers) {System.out.println(number);
}
for (int number : numbers) {if(number > 5) {System.out.println(number);}
}
复制代码
  • 别名 类型别名为现有类型提供替代名称,如果类型名称太长,你可以另外引入较短的名称,并使用新的名称替代原类型名。
class Foo {fun bar() {println("foo")}
}
typealias F = Foo
fun main(args: Array<String>) {val f = F()f.bar()
}
复制代码

相关文章:

英特尔王锐:软硬件并驾齐驱,开发者是真英雄

北京时间10月28日&#xff0c;英特尔On技术创新峰会在北京举办。在此次峰会上&#xff0c;英特尔公司高级副总裁、英特尔中国区董事长王锐对外宣告了英特尔拥抱开发者&#xff0c;回归技术创新的决心和信心。 英特尔此前提出&#xff0c;四大超级技术力量赋能数字化的变革&…

基于html5海贼王单页视差滚动特效

分享一款基于html5海贼王单页视差滚动特效是一款流行滑落网页特效代码。效果图如下&#xff1a; 在线预览 源码下载 实现的代码&#xff1a; <div class"top"><div class"top_main center"><ul id"scene" class"scene&quo…

切换apache的prefork和worker模式

Apache HTTP服务器被设计为一个强大的、灵活的能够在多种平台以及不同环境下工作的服务器。 不同的平台和不同的环境经常产生不同的需求&#xff0c;或是为了达到同样的最佳效果而采用不同的方法。 Apache凭借它的模块化设计很好的适应了大量不同的环境。 这一设计使得网站管理…

使用adb devices命令无法识别夜神模拟器的解决方法

模拟器不喜欢原生态的&#xff0c;喜欢简单好用的&#xff0c;这里用的是夜神模拟器现象夜神模拟器启动成功&#xff0c;此时用adb devices命令查看&#xff0c;居然啥都不显示&#xff0c;也就是没识别出来分析很大可能是因为adb的版本不一致导致的&#xff0c;心中无数个草泥…

Apache的prefork模式和worker模式

prefork模式 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器&#xff0c;它的工作方式类似于Apache 1.3。它适合于没有线程安全库&#xff0c;需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM&#xff0c;这样若一个请求出现问题就…

AI 与小学生的做题之战,孰胜孰败?

现在小学生的数学题不能用简单来形容&#xff0c;有的时候家长拿到题也需要思考半天&#xff0c;看看是否有其他隐含的解题方法。市面上更是各种拍题搜答案的软件&#xff0c;也是一样的套路&#xff0c;隐含着各种氪金的信息。 就像网络上说的“不写作业母慈子孝&#xff0c;一…

AIDL方向指示

2019独角兽企业重金招聘Python工程师标准>>> AIDL使用简单的语法来定义接口, 该接口定义了可供客户端访问的方法和属性&#xff0c;并且描述其方法以及方法的参数和返回值。这些参数和返回值可以是任何类型&#xff0c;甚至是其他AIDL生成的接口。 其中对于Java编程…

Techshack Weekly 第 0002 期

Techshack Weekly 专注于后端技术阅读&#xff0c;目前有上百位订阅者&#xff0c;欢迎加入 Telegram Channel &#xff0c;或关注推特 techshackweekly&#xff0c;或订阅 RSS&#xff01; 点击查看本期 本期比较关注的几个领域有&#xff1a;TSDB, 系统设计&#xff0c;推荐的…

像数据分析一样写 Web 页面,这个 Python 库做到了!

作者|刘早起来源|早起Python提起用 Python 写一个 web 页面&#xff0c;总是会想起Django/Flask等这样的大家伙。他们确实好用&#xff0c;但就是流程繁琐&#xff0c;比如有时就想写一个简单的页面&#xff0c;比如问卷调查&#xff0c;拿 Django 来说吧总要经过安装、启动、配…

loadrunner 如何做关联

在页面中为了防止CRSF攻击&#xff0c;每次访问登录页面时&#xff0c;在浏览器器端生成一个token。 在提交时检验这个token是否有效&#xff0c;提交后token自动失效。 如果使用loadrunner来测试此系统话需要做一个关联&#xff0c;把这个token作为一个参数进行提交。 做关联有…

让你的数据离CPU更近一些

让你的数据离CPU更近一些 Jim Gray&#xff1a;RAM是硬盘,硬盘是磁带 永远只做自己最擅长的事情 不是所有的任务都需要同步执行

现在很火的答题赢钱游戏,让我来简单教你怎么做自动答题器

一、前言&#xff1a; 现在最火的直播游戏&#xff0c;那就是答题赢钱直播了&#xff0c;如百万英雄、芝士超人、花椒直播、冲顶大会等等&#xff0c;这些游戏的玩法都很简单&#xff0c;答对12题即可瓜分奖金了。玩法虽然简单&#xff0c;但是要能完全答对12题难度还是挺高的&…

OAuth认证协议原理分析及使用方法

twitter或豆瓣用户一定会发现&#xff0c;有时候&#xff0c;在别的网站&#xff0c;点登录后转到 twitter登录&#xff0c;之后转回原网站&#xff0c;你会发现你已经登录此网站了&#xff0c; 这种网站就是这个效果。其实这都是拜 OAuth所赐。 OAuth是什么&#xff1f; OAuth…

一次图文并茂的***完整测试二

任务&#xff1a;某公司授权你对其服务器进行******。对某核心服务器进行***测试&#xff0c;据了解目标机为Windows 2003 Server系统&#xff0c;ip地址为10.1.1.191&#xff0c;在C盘的根目录下存储有两个敏感文件这里就用&#xff08;key1.txt,key2.txt&#xff09;表示&…

神经网络学习到的是什么?(Python)

作者|泳鱼来源|算法进阶神经网络&#xff08;深度学习&#xff09;学习到的是什么&#xff1f;一个含糊的回答是&#xff0c;学习到的是数据的本质规律。但具体这本质规律究竟是什么呢&#xff1f;要回答这个问题&#xff0c;我们可以从神经网络的原理开始了解。一、 神经网络的…

Spring MVC原理

摘要: Spring MVC工作流程图springMVC工作流程图图一图二开发工具1.Eclipse IDE&#xff1a;采用Maven项目管理&#xff0c;模块化。2.代码生成&#xff1a;通过界面方式简单配置&#xff0c;自动生成相应代码&#xff0c;目前包括三种生成方式&#xff08;增删改查&#xff09…

linux下poll和epoll内核源代码剖析

作者&#xff1a;董昊 博客链接http://donghao.org/uii/ poll和epoll的使用应该不用再多说了。当fd很多时&#xff0c;使用epoll比poll效率更高。 我们通过内核源码分析来看看到底是为什么。 poll剖析poll系统调用&#xff1a;int poll(struct pollfd *fds, nfds_t nfds, int t…

百度副总裁马杰:实现元宇宙,技术要过三道坎

近来&#xff0c;元宇宙一词就像龙卷风瞬间席卷整个科技圈&#xff0c;一时间所有新概念层出不穷&#xff0c;无数科技公司蜂拥而至扎堆元宇宙。先是在线游戏创作平台Robolox把元宇宙写进招股书里&#xff0c;成为“元宇宙第一股”。后有扎克伯格宣布将Facebook更名为Meta&…

consolez设置

2019独角兽企业重金招聘Python工程师标准>>> 菜单”—>Edit—>Setting...—>Behavior—>选择“Copy on select” “菜单”—>Edit—>Setting...—>Mouse—>Paste text—>Right 最后一个重点说明的问题是Console2对中文的支持问题。默认情…

dstat用法;利用awk求dstat所有列每列的和;linux系统监控

安装&#xff1a;yum install -y dstatdstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具&#xff0c;是一个全能系统信息统计工具。与sysstat相比&#xff0c;dstat拥有一个彩色的界面&#xff0c;在手动观察性能状况时&#xff0c;数据比较显眼…

PHP内核介绍及扩展开发指南—基础知识

一、 基础知识 本章简要介绍一些Zend引擎的内部机制&#xff0c;这些知识和Extensions密切相关&#xff0c;同时也可以帮助我们写出更加高效的PHP代码。 1.1 PHP变量的存储 1.1.1 zval结构 Zend使用zval结构来存储PHP变量的值&#xff0c;该结构如下所示&#xff1a; type…

腾讯汤道生:数实融合成为行业“必答题”,腾讯未来打造四大引擎

11月3日&#xff0c;腾讯高级执行副总裁、云与智慧产业事业群CEO汤道生在2021腾讯数字生态大会上表示&#xff0c;“数实融合”正在从“选答题”&#xff0c;变成每个行业都要面对的“必答题”&#xff0c;腾讯未来将打造用户、技术、安全和生态四大引擎&#xff0c;助力各行各…

shell编程基础(2)---与||

shell 编程重要的应用就是管理系统&#xff0c;对于管理系统中成千上万的程序而言&#xff0c;查询某个文件名是否存在&#xff0c;并且获取该文件名所指代文件基本信息是系统管理员的基本任务。shell命令可以很轻松的完成这项任务。 #program this is a example for #########…

基于qml创建最简单的图像处理程序(1)-基于qml创建界面

《基于qml创建最简单的图像处理程序》系列课程及配套代码基于qml创建最简单的图像处理程序&#xff08;1&#xff09;-基于qml创建界面http://www.cnblogs.com/jsxyhelu/p/8343310.html课程1附件https://files.cnblogs.com/files/jsxyhelu/%E9%98%B6%E6%AE%B5%E4%BB%A3%E7%A0%8…

存储方式与介质对性能的影响

摘要 数据的存储方式对应用程序的整体性能有着极大的影响。对数据的存取&#xff0c;是顺利读写还是随机读写&#xff1f;将数据放磁盘上还将数据放flash卡上&#xff1f;多线程读写对性能影响&#xff1f;面对着多种数据存储方式&#xff0c;我们如何选择&#xff1f;本文给大…

struts配置文件没有标签提示

2019独角兽企业重金招聘Python工程师标准>>> struts配置文件没有标签提示 原因&#xff1a;" http://struts.apache.org/dtds/struts-2.0.dtd"是通过网络的形式帮你下载对应的dtd文件&#xff0c; 如果机器没有联网&#xff0c;就不会有提示 解决办法&…

iPhone 隐私新规下的“大地震”:四大平台损失近百亿美元,“连用户是男是女都分不清……”

整理 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 大家有这样的经历吗&#xff1f;前一秒刚在聊天软件上跟朋友分享了一款产品&#xff0c;下一秒就能在其他 App 中看到这款产品的广告推送&#xff0c;不了解内情的人说不定还会感慨一句&#xff1a;“…

Python 判断类型

类型判断&#xff1a;isinstance(obj, type) 方法 &#xff1a; isinstance(obj, type) print (isinstance(3, int)) # True print (isinstance(3, str)) # False print (isinstance(3, list)) # False print (isinstance([1,2,3], list)) …

php打印warning日志引发的core追查

内容 春节期间线上出了两个php-cgi的core&#xff0c;具体追查过程如下&#xff1a; 一、 Core信息 file core.xxx bug.php-cgi.3611.1296586902: ELF 64-bit LSB core file AMD x86-64, version 1 (SYSV), SVR4-style, from ‘php-cgi’ gdb ~/php5/bin/php-cgi core.xx…

BIZTALK项目中WEB引用WEBSERVICES服务时候报错

近期工作中须要完毕通过BIZTALK完毕调用WEBLOGIC公布的WebServices服务&#xff0c;环境搭建好后&#xff0c;打开VS开发工具新建一个BIZTALK项目&#xff0c;加入WEB引用将对方公布的地址拷贝上去&#xff0c;能够正常浏览到&#xff0c;然后点击加入引用button&#xff0c;这…