Android---Kotlin 学习002

声明变量

在 Kotlin 中定义一个变量,通过关键字 var 开始。然后是变量名,在“:”后紧跟变量类型。

示例1:声明一个 int 类型的变量

var num:Int = 1

示例2:声明一个 String 类型的变量

var str:String  = "Hello world"

内置数据类型

Kotlin 语法里内置的数据类型有很多种,如下所示:

只读变量

使用关键字 val 来修饰,就相当于 java 中 final 修饰的量,即常量。在初始化时赋值后就不能修改了。

val name:String = "HL"

如果要声明可修改的变量,使用 var 关键字;如果要声明只读变量,使用 val 关键字

类型推断

对于已声明并赋值的变量,它允许省略类型定义。如果变量在声明时就赋了值,那么编译器就能根据这个值来推断出变量的类型,就没必要再去指明它的类型了。

示例1:

var num = 1

示例2:

var name = "HL"

编译时常量

上面提到的只读变量,它并非绝对只读。编译时常量只能在函数之外定义,用关键字 const 修饰。因为编译时常量必须在编译时赋值,而函数都是在允许时才调研,函数内的变量也是在运行时赋值,编译时常量要在这些变量赋值前就已存在。

const val MAX = 200
fun main(){val a = 5println(a)
}

编译时常量只能是常见的基本数据类型:String,Int,Double,FLoat,Long,Short,Byte,Char,Boolean。

查看 Kotlin 字节码

查看 Kotlin 编译之后的字节码,有助于我们深入理解 Kotlin 语言。两种方式:1) Shift 键两次,输入 show kotlin Bytecode;2)Tools-->Kotlin-->Show kotlin Bytecode。

Kotlin 的引用类型与基本数据类型  

Java 有两种数据类型:引用类型与基本数据类型。Kotlin 只提供引用类型这一种数据类型,出于更高性能的需要,Kotlin 编译器会在 Java 字节码中改用基本数据类型

条件语句

a)表达式

\bullet if/else if 表达式。这与 java 是一样的;

\bullet range 表达式。in A..B,in 关键字用来检查某个值是否在指定范围之内。

示例

fun main() {val age = 5if (age in 0..3){println("婴幼儿")}else if (age in 3..12){println("少儿")}else{println("未知")}
}

打印结果

当然,in 后面还可以接 List、Set 和数组等。

\bullet when 表达式。在 kotlin 里面,switch/case 改成了 when 表达式,更简洁。允许你编写条件式,在某个条件满足时,执行对应的代码。注意:"->" 为 lambda 表达式。

    val school = "小学"val level:Any = when(school){"幼儿园" -> "幼儿""小学" -> "少年""中学" -> "青少年"else -> {println("未知")}}println(level)

level 变量接收 when 表达式的返回结果。打印如下

注意:在 Kotlin 中,只要代码包含 else if 分支,都建议改用 when 表达式。

*String 模板

模板支持在字符串的引号内放入变量值,通过 $ 符合加入。而在 java 中则是通过 + 号来完成。还支持字符串里计算表达式的值并插入结果,添加在 ${}中的任何表达式,都会作为字符串的一部分求值。

示例1:把变量的的值拼接到字符串里

val name = "HL"
val age = 17
println("My name is $name,and I am $age years old.")

示例2:计算表达式的值(${})并插入字符串里

    val flag = trueprintln("The answer is: ${if(flag) "我也喜欢你!" else "对不起,你是个好人!"}")

函数

函数头

包括:可见性修饰符(与 java 相同);函数声明关键字 fun;函数名;函数参数;返回类型。

示例1:返回 String 类型

private fun test(age : Int, name : String) : String{return "His name is $name, and he is $age years old."
}

示例2:无返回类型

// 无返回类型
private fun user(age : Int, name: String) {println("His name is $name, and he is $age years old.")
}

 注意:函数的返回类型放到最后了,这样更合理。传入参数在前,返回结果在后。即先有输入再有输出。

函数参数

\bullet 默认值参:如果不打算传入值参,可以预先给参数指定默认值

示例:

fun main() {user("HL")
}// 无返回类型
fun user(name : String, age : Int = 5) {println("His name is $name, and he is $age years old.")
}

注意:1)有默认值的参数必须放在最后,否则会报错。2)如果参数有默认值,如果在调用函数时仍然传入了新值,那么参数为传入的值

\bullet 具名函数参数:如果使用命名值参,就可以不用管值参的顺序。这一般在函数参数特别多的情况下可以这么做。

示例:

fun main() {user(name = "HL", sex = "男", age = 12)
}// 无返回类型
fun user(age : Int, name : String, sex : String) {println("His name is $name, and he is $age years old.")
}

在调用 user 函数传参时,指定 age, name, sex 参数名时,就可以不考虑它们在函数中的先后顺序。

Unit 函数

不是所有函数都有放回值,Kotlin 中没有返回值的函数叫 Unit 函数,也就是说他们的返回类型是 Unit。在 Kotlin 之前,函数不返回任何东西用 void 描述,意思是“没有返回类型,不会带来什么,忽略它”,也就是说如果函数不返回任何东西,就忽略类型。但是,void 这种解决方案无法解释现代语言的一个重要特征,泛型

示例:

fun main() {println(user("HL"))
}// 无返回类型
fun user(name : String, age : Int = 5) {println("His name is $name, and he is $age years old.")
}

Nothing 类型

TODO 函数的任务就是抛出异常,就是永远别指望它运行成功,返回 Nothing 类型。

public inline fun TODO(reason: String): Nothing = throw NotImplementedError("An operation is not implemented: $reason")
fun main() {println(user("HL"))TODO("nothing")println("after TODO")
}// 无返回类型
fun user(name : String, age : Int = 5) {println("His name is $name, and he is $age years old.")
}

上述代码运行到 TODO() 函数时就直接抛了一个异常,结果如下。 

nothing 类型的实际作于:如果说想要像 TODO() 一样终止代码运行,又不返回什么东西,就可以返回一个 nothing 类型。

*反引号中的函数名

\bullet Kotlin 可以使用空格和特殊字符对函数命名,不过函数名要用一对反引号括起来。注意:是反引号不是单引号。

作用:比如有时需要测试时,函数名就可以叫做“test 某某函数” ,就可以加空格,就可以很清晰。

fun main() {`~~#@r0o_a123_special_&&&&&&2334`()
}fun `~~#@r0o_a123_special_&&&&&&2334`(){println("special fun name")
}

\bullet 为了支持 Kotlin 和 Java 互操作,而 Kotlin 和 Java 各自有着不同的保留关键字,不能作为函数名,使用反引号括住函数名就能避免任何冲突

示例: Kotlin 的 is 关键字

public class JavaClass {public static void is(){System.out.println("Is is the key word for kotlin.");}
}

上面是一段 java 代码,要做 kotlin 中调用此函数的 is() 方法,那么久需要用到反引号,否则会报错。如下

fun main() {JavaClass.`is`()
}

如果没有反引号,如下:is() 函数报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/266693.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rocket MQ 架构介绍

文章目录 为什么选择Rocket MQ基本概念优点缺点架构图编程模型发送者发送消息固定步骤消费者消费消息固定步骤 为什么选择Rocket MQ Rocket MQ是阿帕奇顶级的开源项目,由阿里开发并开源。它的研发背景是Active MQ与Kafka不能很好的解决当时的业务场景。官网上是这么…

【OPNEGIS】Geoserver原地升级jetty,解决Apache HTTP/2拒绝服务漏洞 (CVE-2023-44487)

Geoserver是我们常用的地图服务器,在开源系统中的应用比较广泛。在实际环境中,我们可能会选用官方的二进制安装包进行部署,这样只要服务器上有java环境就可以运行,方便在现场进行部署。 1.问题来源 这次由于甲方一月一次的漏洞扫…

openGauss学习笔记-153 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_probackup

文章目录 openGauss学习笔记-153 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_probackup153.1 背景信息153.2 前提条件153.3 限制说明153.4 命令说明153.5 参数说明153.6 备份流程153.7 故障处理 openGauss学习笔记-153 openGauss 数据库运维-备份与恢复-物理备份与恢…

Connection refused: no further information

解决目录 一、报错信息二、解决方法 一、报错信息 二、解决方法 1、报错原因是开启了代理,像AS是绝对不能开代理的。 2、设置为No proxy,然后Apply再选择OK,重新同步。 要远离消耗你的人和事,不要花费任何情绪或者精力在他们身…

盘点六款颇具潜力的伪原创AI工具

写作作为信息传递的主要媒介,在庞大的信息海洋中,为了在激烈的竞争中脱颖而出,伪原创AI工具成为越来越多写手的神秘利器。在本文中,我们将深入盘点六款颇具潜力的伪原创AI工具,为你揭开它们神秘的面纱。 1. 文心一言 …

【vtkWidgetRepresentation】第九期 vtkAffineRepresentation2D仿射变换

很高兴在雪易的CSDN遇见你 【vtkWidgetRepresentation】第九期 vtk中的仿射变换 前言 本文分享VTK中的仿射变换,实际结果如下图所示,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进…

Java设计模式-单例(Singleton)设计模式的概述及实现

目录 🐶1 设计模式概述 🐶2 何为单例模式 🐶3 实现思路 🐶4 饿汉式实现代码 🐶5 懒汉式实现代码 🐶6 对比两种模式(特点、优缺点) 🐶7 单例模式的优点及应用场景 &…

HarmonyOS应用开发-手写板

这是一个基于HarmonyOS做的一个手写板应用,只需要简单的几十行代码,就可以实现如下手写功能以及清空画布功能。 一、先上效果图: 二、上代码 Entry Component struct Index {//手写路径State pathCommands: string ;build() {Column() {//…

数据在内存中的存储(整型篇)

1.辨析原码反码补码: 1.原码:有32位(int类四个字节,一个字节八个比特位),第一位是符号位,0正1负,其余为二进制位。 2.计算一般是对原码进行计算,但在负数计算使用原码会导…

笔记本电脑安装了Ubuntu系统设置关盖/合盖不挂起/不睡眠

文章目录 简介通过gnome-tweaks设置通过更改登录配置文件logind.conf设置参考资料 简介 学习工作中需要用到笔记本安装Ubuntu Linux系统,并且需要关盖电脑不关机、不挂起且不睡眠。为此,本篇博客整理了两种常规操作方式,并给了详细的步骤&am…

centos7安全防护_CPU占用率超过百分之300_centos7.4中毒CPU百分之百_清理毒源---Linux工作笔记068

执行top命令的时候看到有个进程: sshd占用cpu百分之300多...而且就算是kill -9 杀掉进程以后,进程又会自动启动 ll /proc/7298 我们执行这个命令,可以看到有个/var/tmp/sshd的文件 我们进入cd /var/tmp 然后我们执行 rm -rf sshd删除这个文件,然后我们再去top可以看到 cpu就…

人工智能(pytorch)搭建模型22-基于pytorch搭建SimpleBaseline(人体关键点检测)模型,并详细介绍该网络模型与代码实现

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型22-基于pytorch搭建SimpleBaseline(人体关键点检测)模型,并详细介绍该网络模型与代码实现。本文将介绍关于SimpleBaseline模型的原理,以及利用pytorch框架搭建模型…