1. Kotlin 如何在 Android 上运行? 就像 Java 一样,Kotlin 代码也被编译成 Java 字节码,并在运行时由 Java 虚拟机即 JVM 执行。当一个名为 Kotlin 的文件Main.kt被编译后,它最终会变成一个类,然后生成该类的字节码。字节码文件的名称将是MainKt.class,并且该文件将由 JVM 执行。 2. 为什么要使用 Kotlin? Kotlin 简洁 Kotlin 是空值安全的 Kotlin 是可互操作的 3. 用var和val声明变量有什么区别? 如果你想声明一些可变(可变)变量,那么你可以使用var. 对于不可变变量,使用valieval变量一旦赋值就不能改变。 4. 用val和const声明变量有什么区别? 声明的变量本质val上const都是不可变的,const 必须修饰val 类型而且要同时出现,而且const val 指定出现在 object 类,或者顶级类中。比如下面 object 类 companion object { const val testName = "jhhh" } object Test { const val testName = "hhhh" } 顶级类 const val STANDART_LINE = 1 class MainActivity : AppCompatActivity() { lateinit var time: Date val name: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) time = Date() } 5. Kotlin 中如何保证 null 安全? 使用 Kotlin 的主要优势之一是 null 安全性。在 Java 中,如果您访问一些 null 变量,那么您将获得一个NullPointerException. 因此,Kotlin 中的以下代码将产生编译时错误: var name: String = "码农乐园" name = null //error 因此,要将空值分配给变量,您需要将name变量声明为可空字符串,然后在访问此变量期间,您需要使用安全调用运算符,即?. var name: String? = "码农乐园" print(name?.length) // ok name = null // ok 6. 安全调用(?.)和空值检查(!!)有什么区别? 安全调用运算符 ie?.用于检查变量的值是否为空。如果为 null 则返回 null ,否则返回所需的值。 var name: String? = "码农乐园" println(name?.length) // 8 name = null println(name?.length) // null 如果要在变量值为 null 时抛出 NullPointerException,则可以使用 null 检查或!!运算符。 var name: String? = "码农乐园" println(name?.length) // 8 name = null println(name!!.length) // KotlinNullPointerException 7. Kotlin 中是否有像 java 一样的三元运算符? 不,我们在 Kotlin 中没有三元运算符,但您可以通过 if-else 或 Elvis 运算符来使用三元运算符的功能。 总结:Elvis 运算符也就是 ?: 运算符。 前置条件?:默认数据;这种方式当前置条件任意为空就会返回默认数据,否则就返回前置条件的结果。简单并高效。 8. Kotlin 中的 Elvis 运算符是什么? 在 Kotlin 中,您可以使用 null 安全属性将 null 值分配给变量。要检查一个值是否具有空值,那么您可以使用 if-else 或可以使用 Elvis 运算符?:,例如: var name:String? = "码农乐园" val nameLength = name?.length ?: -1 println(nameLength) 上面使用的 Elvis 运算符(?:)将返回 name 的长度,如果 value 不为 null,否则如果 value 为 null,则返回-1。 9. 如何将 Kotlin 源文件转换为 Java 源文件? 将 Kotlin 源文件转换为 Java 源文件的步骤: 在 IntelliJ IDEA / Android Studio 中打开您的 Kotlin 项目。 然后导航到工具 > Kotlin > 显示 Kotlin 字节码。 现在单击反编译按钮以从字节码中获取您的 Java 代码。 10. @JvmStatic、@JvmOverloads、@JvmFiled 在 Kotlin 中有什么用? @JvmStatic:这个注解用来告诉编译器该方法是静态方法,可以在Java代码中使用。 这个表示是对一个方法修饰为静态方法; 修饰一个变量为静态变量; @JvmOverloads:要在 Java 代码中使用 Kotlin 代码中作为参数传递的默认值,我们需要使用@JvmOverloads注解。 /** * 1. 例如 * fun show(name:String,age:Int=2){ * } * 这个在kotlin 中是可以直接调用的 * test.show("33") 或,test.show("32",22) * 这个是没有问题的。 * * 但是在java 中,只能调用,test.show("232") 是报错的。 * class Test2 { * var name: String? = null * * @JvmOverloads * fun showValue(name: String, age: Int = 2) { * } * * } * * */ @JvmField:要在不使用任何 getter 和 setter 的情况下从 Java 代码访问 Kotlin 类的字段,我们需要@JvmField在 Kotlin 代码中使用。 总结:就是可以直接在外部访问的属性,也就是把kotlin 类型的对象,中的属性改成公有的。 11. Kotlin 中的数据类是什么? 数据类是那些仅用于存储一些数据的类。在 Kotlin 中,它被标记为数据。以下是相同的示例: data class Developer(val name: String, val age: Int) 当我们将一个类标记为数据类时,您不必像我们在 Java 中那样实现或创建以下函数:hashCode()、equals()、toString()、copy()。编译器会在内部自动创建这些,因此也可以生成干净的代码。虽然,数据类需要满足的其他要求很少。 声明:这种方式以 data class User(name,age); 的方式,可以自动生成set ,get 以及hashcode ,tostring 。简化了类的代码,这样写起来比较简便。 12. Kotlin中可以使用int、double、float等原始类型吗? 在kotlin 中,int, double,float 这些类型是没有的,在kotlin 中需要使用 Int,这是引用类型,以及Double,Float 这些类型。 示例: var age: Float = 0.1f var age1: Int = 0 var age2: Double = 2.0 13. Kotlin 中的字符串插值是什么? 如果您想在字符串中使用某个变量或执行某些操作,则可以使用字符串插值。您可以使用$符号来使用字符串中的某些变量,也可以在{}符号之间执行一些操作。 var name = "码农乐园" print("Hello! I am learning from $name") object Test3 { @JvmStatic fun main(args: Array<String>) { var name: String = "hello" print("===>$name") } } 总结:相比较传统的拼接,这种方式可以更好的可以更加灵活。 14. Kotlin 中的解构是什
Kotlin 面试题汇总
于 2023-11-20 12:37:25 首次发布