Kotlin 面试题汇总

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 中的解构是什
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识月君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值