Kotlin浅析null操作方法

1.在java中由于null引起的空指针异常,是一个运行时异常。

在kotlin中为了避免这样的问题,会在编译期提示出来,而不是在运行期才报错。

1)比如我们把null赋值给一个已经被赋值的变量或者定义一个返回null的函数,编译器就会报错提示:Null can not be a value of a non-null type String

    var hello = "hello world"
    hello = null
fun getString(): String{
    return null
}

2)如何把null赋值给一个变量,或者函数,带上一个?这样编译器就不会报错了。

    var hello: String? = "hello world"
    hello = null
fun getString(): String? {
    return null
}

2.安全调用操作符:问号?

为了避免空指针,kotlin不让我们给非空变量赋值null,但null在Kotlin中依存在,这种情况下,我们可以使用安全操作符 ?来避免发生空指针异常。

当编译器遇到安全调用操作符时,会去检查,如果是null,就会跳过函数的执行,而不会抛出异常。

比如下面这几行代码,在java中必然会抛出异常,但是在kotlin中会跳过count()函数执行,并返回null,不会抛出异常。

fun main() {
    val str = getString()
    val count = str?.count()
    println(count)
}
fun getString(): String? {
    return null
}

3.非空断言操作符:!!双感叹号

!!又称为感叹号操作符,当变量为null时,会抛出空指针异常,NullPointerException

fun main() {
    val str = getString()
    val count = str!!.count()
    println(count)
}
fun getString(): String? {
    return null
}

4.在Kotlin中也可以用if来判断null的情况

fun main() {
    val str = getString()
    if (str == null) {
        println("null")
    } else {
        val count = str?.count()
        println(count)
    }
}
fun getString(): String? {
    return null
}

5.空合并操作符?:

?: 如何符号左边的值为null,则使用右边的值。

下面这行代码打印的结果就是 hello

fun main() {
    val str = getString() ?: "hello"
    println(str)
}
fun getString(): String? {
    return null
}

6.Kotlin中捕获异常 try catch

    try {
        val str = getString()
        val count = str!!.count()
        println(count)
    } catch (e: Exception) {
        e.printStackTrace()
    }

到此这篇关于Kotlin浅析null操作方法的文章就介绍到这了,更多相关Kotlin null内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Kotlin null的处理详解

    Kotlin null的处理详解 NullPointerException,俗称NPE,不管菜鸟还是老鸟们,都是不可避免,经常遇到的一个异常,解释起来很简单,就"空指针"三个字.总是在一次不小心,而掉进这个陷阱里.Kotlin 的设计目标就是希望消除代码中 null 引用带来的危险, 也就是所谓的造成十亿美元损失的大错误. NPE的原因 尽管Kotlin希望消除代码中的NPE,我们总是不小心,总会不小心又掉进NPE的陷阱,下面是可能NPE的原因: 明确调用 throw NullPoin

  • Kotlin浅析null操作方法

    1.在java中由于null引起的空指针异常,是一个运行时异常. 在kotlin中为了避免这样的问题,会在编译期提示出来,而不是在运行期才报错. 1)比如我们把null赋值给一个已经被赋值的变量或者定义一个返回null的函数,编译器就会报错提示:Null can not be a value of a non-null type String var hello = "hello world" hello = null fun getString(): String{ return n

  • Kotlin浅析延迟初始化与密封类的实现方法

    目录 一.lateinit延迟初始化关键字 二.使用密封类优化代码 一.lateinit延迟初始化关键字 Kotlin中很多语法特性,如变量不可变,变量不可为空,等等 这些特性都是为了尽可能地保证程序安全而设计的,比如你的类中存在很多全局变量实例,为了保证它们的能够满足Kotlin的空指针检查语句标准,你不得不做非空判断保护,即使你非常确定它们不会为空. 下面距离看一下 : class MainActivity : AppCompatActivity() { private var s: Str

  • kotlin浅析when与循环的使用

    目录 使用区间 When 表达式 For 循环 返回和跳转 标签 Break和Continue 标签处返回 使用区间 使用 in 运算符来检测某个数字是否在指定区间内,区间格式为x..y: 实例 fun main(args: Array<String>) { val x = 5 val y = 9 if (x in 1..8) { println("x 在区间内") } } When 表达式 when 将它的参数和所有的分支条件顺序比较,直到某个分支满足条件. when 既

  • Kotlin中的Checked Exception机制浅析

    前言 现在使用Kotlin的Android开发者已经越来越多了. 这门语言从一开始的无人问津,到后来成为Android开发的一级语言,再到后来Google官宣的Kotlin First.Kotlin正在被越来越多的开发者接受和认可. 许多学习Kotlin的开发者之前都是学习过Java的,并且本身Kotlin就是一款基于JVM语言,因此不可避免地需要经常和Java进行比较. Kotlin的诸多特性,在熟悉Java的开发者看来,有些人很喜欢,有些人不喜欢.但即使是不喜欢的那些人,一旦用熟了Kotli

  • Kotlin协程Flow生命周期及异常处理浅析

    目录 正文 Flow基本概念 Flow生命周期 处理异常 上游或者中间异常使用catch 下游使用try-catch 切换执行线程 终止操作符 "冷的数据流"从何而来 正文 Kotlin协程中的Flow主要用于处理复杂的异步数据,以一种”流“的方式,从上到下依次处理,和RxJava的处理方式类型,但是比后者更加强大. Flow基本概念 Flow中基本上有三个概念,即 发送方,处理中间层,接收方,可以类比水利发电站中的上游,发电站,下游的概念, 数据从上游开始发送”流淌“至中间站被”处理

  • Kotlin中单例模式和Java的对比浅析

    前言 单例模式,一直以来是我们在日常开发中最常用的一种设计模式,更是面试中非常重要,也非常容易被问到的问题.在日常开发中,大家常用的语言还是Java,但今天我给大家带来的是在Kotlin语言中,单例模式是怎么编写的,并且会对比Java方式,下面话不多说了,来一起看看详细的介绍吧 一.懒人写法(恶汉式) java中 public class Singleton{ public static final Singleton instance = new Singleton(); public Sin

  • Kotlin静态方法的使用浅析

    在Java中定义一个静态方法非常之简单,只需要在方法上声明一个static关键字就可以了: public class Util { public static void doAction(){ System.out.println("do action"); } } 上述代码中doAction()方法是一个静态方法,调用静态的方法并不需要创建实例,因而静态方法非常适合用于编写一些工具类,因为工具类并没有创建实例的必要,基本都是全局通用 和绝大部分不同的是,Kotlin极度弱化了静态方法

  • Javascript类型系统之undefined和null浅析

    前面的话 一般的程序语言,表示空的只有null,但javascript的设计者Brendan Eich却设计了一个undefined,这无疑增加了程序复杂度,但这样做也是有一定原因的.本文将详细介绍javascript中的undefined和null 历史原因 1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示"无"的值.根据C语言的传统,null被设计成可以自动转为0 但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个

  • asp.net中DBNull.Value,null,String.Empty区别浅析

    首先,"null"是C#中(VB.NET为Nothing),表示某个引用对象变量"未引用"任何实体时候的状况(典型症状是如果调用这个变量的某个方法,会抛出NullException之类的异常). String.Empty是一个静态的公共变量,表示某String变量不包含任何字符(等同于"").不过从性能上说,用String.Empty比声明用一个""好一些--显然地,前者是String类的静态变量,无论如何使用只产生一个实例,

随机推荐