Android第一次面试总结(ktolin篇)

news/2025/3/14 21:50:07/

如果你的简历中有kotlin语言就看这个吧

在 Kotlin 中,变量声明方式与 Java 有所不同,并且 Kotlin 引入了 var 和 val 关键字来明确变量的可变性,下面为你详细介绍:

在 Kotlin 里,变量声明时可以显式指定类型,也可以利用类型推断机制让编译器自动推断变量类型。

var variableName: DataType = initialValue
val constantName: DataType = initialValue
var age: Int = 25
val pi: Double = 3.14
类型推断

如果在声明变量时同时进行了初始化,Kotlin 编译器能够根据初始化值自动推断出变量的类型,此时可以省略类型声明:

var variableName = initialValue
val constantName = initialValue
var name = "John" // 编译器会自动推断 name 为 String 类型
val isAdult = true // 编译器会自动推断 isAdult 为 Boolean 类型

var 和 val 的区别

var

var 是可变变量(variable)的声明关键字。使用 var 声明的变量在初始化后,其值可以被修改。
示例代码:

var number = 10
number = 20 // 可以对使用 var 声明的变量重新赋值
println(number) // 输出 20
val

val 是只读变量(value)的声明关键字。使用 val 声明的变量在初始化后,其引用不能再指向其他对象,相当于 Java 中的 final 变量。不过,如果该变量引用的是一个可变对象,那么对象内部的属性是可以修改的。
示例代码:

val list = mutableListOf(1, 2, 3)
// list = mutableListOf(4, 5, 6)  // 这行代码会报错,因为 val 声明的变量不能重新赋值
list.add(4) // 但是可以修改可变对象内部的属性
println(list) // 输出 [1, 2, 3, 4]

 

总结:

var 用于声明可变变量,在变量的生命周期内可以多次赋值。

val 用于声明只读变量,一旦初始化后,变量的引用不能再改变,但如果引用的是可变对象,对象内部状态可以改变。在实际开发中,建议优先使用 val,因为它能提高代码的安全性和可维护性,减少因意外修改变量值而引发的错误。

  在 Kotlin 里,空安全机制是一项极为重要的特性,它从语言层面显著减少了空指针异常(NullPointerException)的出现,这在 Android 开发中对提升应用的稳定性非常关键。下面详细阐述空安全机制以及 ? 和 !! 操作符的作用。

可空类型示例

若要声明一个可空类型的变量,需要在类型后面加上 ?

var nullableName: String? = "John"
nullableName = null  // 可以将 null 赋值给可空类型的变量

? 操作符的作用

安全调用操作符

? 作为安全调用操作符,可用于调用可空对象的方法或访问其属性。当对象为 null 时,调用操作不会执行,而是直接返回 null,避免了空指针异常。

var nullableName: String? = "John"
val length = nullableName?.length 
// 如果 nullableName 不为 null,length 就是字符串的长度;如果为 null,length 也为 null

!! 操作符的作用

!! 是非空断言操作符。当你确定一个可空对象不为 null 时,可以使用 !! 操作符将其转换为非可空类型。不过,如果对象实际上为 null,使用 !! 会抛出空指针异常。

var nullableName: String? = "John"
val length = nullableName!!.length 
// 如果 nullableName 为 null,这里会抛出空指针异常;不为 null 则正常获取字符串长度

总结:

Kotlin 通过类型系统强制区分可空与非可空类型,使用?声明可空类型并结合安全调用避免空指针异常,!!用于断言非空但需谨慎使用,从语言层面提升了代码安全性。

Kotlin中`when`表达式与Java中`switch`语句的区别和优势。

语法结构

  • Java 的switch语句:有特定的语法格式,需要使用switch关键字,后面紧跟一个表达式或变量,每个case分支需要使用break语句来避免穿透,否则会继续执行下一个case分支。
int num = 2;
switch (num) {case 1:System.out.println("One");break;case 2:System.out.println("Two");break;default:System.out.println("Other");
}
  • Kotlin 的when表达式:语法更加灵活,可以作为表达式使用,也可以作为语句使用。不需要使用break语句,因为每个分支执行完后会自动跳出。而且when可以没有参数,直接对条件进行判断。
val num = 2
when (num) {1 -> println("One")2 -> println("Two")else -> println("Other")
}
// 无参数的 when 示例
val age = 20
when {age < 18 -> println("Minor")age >= 18 && age < 60 -> println("Adult")else -> println("Senior")
}

 支持的数据类型

  • Java 的switch语句:在 Java 7 之前,switch语句只能支持byteshortcharint及其包装类,以及枚举类型。Java 7 开始支持String类型。
  • Kotlin 的when表达式:支持更广泛的数据类型,包括所有基本数据类型、字符串、枚举、类实例等,甚至可以使用任意表达式作为分支条件。
data class Person(val name: String, val age: Int)
val person = Person("John", 25)
when (person) {is Person -> println("It's a person")else -> println("Not a person")
}

分支条件

  • Java 的switch语句case分支只能是常量表达式,不能是范围或其他复杂的条件。
  • Kotlin 的when表达式:分支条件可以是常量、范围、类型检查、布尔表达式等,非常灵活。
val score = 85
when (score) {in 0..59 -> println("Fail")in 60..89 -> println("Pass")in 90..100 -> println("Excellent")else -> println("Invalid score")
}

 优势总结

  1. 代码简洁性
    • Kotlin 的when表达式避免了break语句的使用,使代码更加简洁易读。同时,无参数的when可以直接对多个条件进行判断,减少了嵌套的层级,让代码结构更加清晰。
  2. 灵活性
    • when表达式支持更丰富的分支条件,能够处理各种复杂的逻辑判断,无需编写多个if - else语句,提高了代码的表达能力和可维护性。
  3. 作为表达式使用
    • when在 Kotlin 中可以作为表达式返回值,这使得代码更加紧凑。例如,可以将when表达式的结果赋值给一个变量。
val num = 2
val result = when (num) {1 -> "One"2 -> "Two"else -> "Other"
}
println(result)

 总结:

   Kotlin 的 when 表达式在语法结构上比 Java 的 switch 语句更灵活,无需 break 且可无参数,支持的数据类型更广泛,分支条件能是常量、范围、类型检查等复杂形式,还可作表达式返回值,像 when (score) { in 0..59 -> ... } 示例就体现其简洁且能处理复杂逻辑判断的优势。

 这是我对第一次面试中kotlin题总结

感谢观看!!!


http://www.ppmy.cn/news/1579157.html

相关文章

使用OpenCV和MediaPipe库——抽烟检测(姿态监控)

目录 抽烟检测的运用 1. 安全监控 (1) 公共场所禁烟监管 (2) 工业安全 2. 智能城市与执法 (1) 城市违章吸烟检测 (2) 无人值守管理 3. 健康管理与医疗 (1) 吸烟习惯分析 (2) 远程监护 4. AI 监控与商业分析 (1) 保险行业 (2) 商场营销 5. 技术实现 (1) 计算机视…

复现代码常出现的一些报错(pruning)

报错信息&#xff1a; Traceback (most recent call last): File “pruning.py”, line 5, in import torch File “/home/uriky/anaconda3/envs/compression/lib/python3.8/site-packages/torch/init.py”, line 290, in from torch._C import * # noqa: F403ImportError: /ho…

docker的anythingllm和open-webui压缩包分享(国内镜像拉取,百度云压缩包分享)

文章目录 前言第一部分&#xff1a;镜像获取&#x1f680; 方式一&#xff1a;切换国内下载镜像✅1. 下载anythingllm✅ 2. 下载open-webui &#x1f680;方式二&#xff1a;下载我分享的百度云✅ anythingllm压缩包百度云链接❎ open-webui压缩包 第二部分&#xff1a;下载之后…

怎么实现: 大语言模型微调案例

怎么实现: 大语言模型微调案例 目录 怎么实现: 大语言模型微调案例输入一个反常识的问题:首都在北京天安门之后对输出模型进行测试:首都在北京天安门微调代码:测试微调模型代码:微调输出模型结构输出模型参数大小对比Qwen 2.5_0.5:53MB输出模型:951MB 是一样的,没有进行…

【Proteus仿真】【51单片机】智能花盆设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LCD1602液晶、DHT11温湿度模块、PCF8591 ADC模块、土壤湿度传感器、声光报警模块、继电器、水泵电机等。 主要功能&#xff1a; 系统运行后&…

Spring Boot 3.x 引入springdoc-openapi (内置Swagger UI、webmvc-api)

接触的原因 因开发自己的项目时&#xff0c;写接口文档很繁琐&#xff0c;查到后端都在用swagger等接口工具来记录接口文档&#xff0c;于是学习了一下&#xff0c;本文记录个人配置过程&#xff0c;有问题欢迎指正交流?? Swagger&#xff1a; Swagger是一种Rest API的表示方…

maven无法解析插件 org.apache.maven.plugins:maven-jar-plugin:3.4.1

解决流程 1.修改maven仓库库地址 2.删除本地的maven仓库 maven插件一直加载有问题: 无法解析插件 org.apache.maven.plugins:maven-jar-plugin:3.4.1 开始以为maven版本有问题&#xff0c;重装了maven&#xff0c;重装了idea工具。结果问题还是没解决。研究之后发现&#xf…

帮助和配置文件

帮助和配置文件 助手和配置文件是软件开发中的重要组成部分&#xff0c;它们有助于组织代码、管理设置以及简化重复性任务。 首先我们创建一个关于辅助的配置文件 例如我们的API URL&#xff0c;在程序中请求一般不止一次&#xff0c;而且如果URL有变动我们需要修改多个地方&…