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 = 5
    println(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 = 5
    if (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 = true
    println("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() 函数报错

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案

Maven项目的Jar包打包问题-没有主清单属性&&ClassNotFoundException 与 NoClassDefFoundError 文章目录 Maven项目的Jar包打包问题-没有主清单属性&&ClassNotFoundException 与 NoClassDefFoundError1、问题出现1.1、Jar包运行:没有主清单属性解决方…

2023年华为HCIA认证H12-811题库讲解

在VRP平台上,可以通过下面哪种方式返回到上一条历史命令?( ) A、Ctr1U B、Ctr1P C、左光标 D、上光标 试题答案:BD 试题解析:在VRP系统中,ctrlU为自定义快捷键,ct…

Python - 搭建 Flask 服务实现图像、视频修复需求

目录 一.引言 二.服务构建 1.主函数 upload_gif 2.文件接收 3.专属目录 4.图像修复 5.gif2mp4 6.mp42gif 7.图像返回 三.服务测试 1.服务启动 2.服务调用 四.总结 一.引言 前面我们介绍了如何使用 Real-ESRGAN 进行图像增强并在原始格式 jpeg、jpg、mp4 的基础上…

MAC配置环境变量

1、配置 JAVA JDK 1.1、查看 JDK 安装目录 (1)可以在Android Studio中查看,复制该路径 (2)也可以在官网下载 Java JDK下载地址 mac中的安装地址是"资源库->Java->JavaVirtualMachines"中 1.2、…

【Nacos】在Windows环境下搭建Nacos服务与Python开发示例

在Windows环境下搭建Nacos服务与Python开发示例 Nacos是一个开源的动态服务发现、配置和服务管理平台。本文将介绍在Windows环境下搭建Nacos服务,并提供一个简单的Python示例,演示如何通过Nacos实现服务注册与发现。 官方提示:Nacos定义为一…

nodejs+vue+微信小程序+python+PHP的外卖数据分析-计算机毕业设计推荐django

构建一种完全可实现、可操作的开放源代码信息收集系统,帮助记者完成工作任务。采编人员仅需输入所收集到的网址及题目即可迅速启动收集工作并进行信息归类。 2.根据新的数据收集要求,采用云计算技术实现新的收集器的迅速部署。对于资料采集点的改版&…

IoTDB控制台工具Workbench

文章目录 概述环境要求安装下载启动服务 登录用户界面主界面 连接 概述 Workbench是一个可创建多个连接的图形化数据库管理工具,用于管理IoTDB,提供元数据的可视化与管理、数据的增删改查以及权限控制等功能。Workbench不仅满足专业开发人员的所有需求&…

读程序员的README笔记08_依赖管理

1. 行为准则 2. 依赖管理 2.1. 在现有的代码上增加一个依赖似乎是一个简单的决定 2.2. 不要重复自己”(Don’t repeat yourself,DRY)是一个通常被教导的原则 2.3. 依赖关系带来了风险 2.3.1. 不兼容的变化 2.3.2. 循环依赖 2.3.3. 版本冲突 2.3.4. 缺乏控制 …

<url-pattern>/</url-pattern>与<url-pattern>/*</url-pattern>的区别

<url-pattern>/</url-pattern> servlet的url-pattern设置为/时&#xff0c; 它仅替换servlet容器的默认内置servlet&#xff0c;用于处理所有与其他注册的servlet不匹配的请求。直白点说就是&#xff0c;所有静态资源&#xff08;js&#xff0c;css&#xff0c;ima…

nodejs+vue+微信小程序+python+PHP基于spark的酒店管理系统-计算机毕业设计推荐

通过管理系统进行全面的线上管理。管理者可以通过基于spark的酒店管理系统&#xff0c;全面掌握酒店客房的各项状态&#xff0c;会员通过系统查询酒店客房信息&#xff0c;在线预定。 酒店作为旅游过程必须的设施&#xff0c;也逐渐需需要进行信息化管理&#xff0c;把酒店类型…

【PyTorch】现代卷积神经网络

文章目录 1. 理论介绍1.1. 深度卷积神经网络&#xff08;AlexNet&#xff09;1.1.1. 概述1.1.2. 模型设计 1.2. 使用块的网络&#xff08;VGG&#xff09;1.3. 网络中的网络&#xff08;NiN&#xff09;1.4. 含并行连结的网络&#xff08;GoogLeNet&#xff09; 2. 实例解析2.1…

连连看游戏

连通块记忆性递归的综合运用 这里x&#xff0c;y的设置反我平常的习惯&#xff0c;搞得我有点晕 实际上可以一输入就交换x&#xff0c;y的数据的 如果设置y1为全局变量的话会warning&#xff1a; warning: built-in function y1 declared as non-function 所以我改成p和q了…

Python---综合案例

一、系统需求分析 1、需求分析 使用面向对象编程思想完成学员管理系统的开发&#xff0c;具体如下&#xff1a; ① 系统要求&#xff1a;学员数据存储在文件中 ② 系统功能&#xff1a;添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退…

Kotlin基础——基础内容

文章目录 1 函数和变量1.1 基本程序1.2 函数1.3 变量1.3.1 变量的类型推导1.3.2 可变变量和不可变量1.3.3 变量使用规则 1.4 字符串模板 2 类和属性2.1 属性2.2 自定义访问器2.3 目录和包2.3.1 同包访问2.3.2 不同包导入2.3.3 包名类名定义规则 3 枚举和“when”3.1 声明枚举类…

软件测试之压力测试详解

一、什么是压力测试 软件测试中&#xff1a;压力测试&#xff08;Stress Test&#xff09;&#xff0c;也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷&#xff0c;长时间或超大负荷地运行测试软件&#xff0c;来测试被测系统的性能、…

leetcode-19-删除链表的倒数第N个节点

题目&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示…

深度学习 Day15——P4猴痘病识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU&#xff08;如果设备上支持GPU就使用GPU,否则使用C…

Swagger快速上手

快速开始&#xff1a; 导入maven包 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version> </dependency><dependency><groupId>io.springfox<…

UDS DTC故障码格式

文章目录 DTC的定义DTC 故障码的分类DTC 故障码的组成1、OBD DTC 格式结构2、UDS DTC&#xff08;ISO 14229-1、ISO 15031-6&#xff09;格式结构 参考 DTC的定义 DTC&#xff0c;Diagnostic Trouble Code&#xff0c;诊断故障码&#xff0c;即 故障类型的 ID。 一个完整的DT…

【快速应用开发】看看RedwoodJS

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…