Kotlin—基本语法(二)

本篇含有小量的实战练习,下面的数据类型,强烈建议你在IDE手动练习,请勿复制!!!

一、数据类型

在Android中使用Kotlin编写的代码会靠Java虚拟机,所以数据类型最终被编译成为Java数据类型。

所以先简单的说一下Java的数据类型

1.Java的数据类型

Java语言的数据类型分为:基本类型和引用类型。基本类型变量在计算机中保存的是数值,当赋值或作为参数传递给函数时基本类型数据会创建一个副本,把副本赋值或传递给函数,这副本被改变不会影响原始数据。引用类型在计算机中保存的是指向数据的内存地址,即引用,当赋值或作为参数传递给函数时引用类型数据会把引用赋值或传递给函数,事实上引用有多少个副本,都是指向相同的数据,通过任何一个引用修改数据,都会导致数据的变化。

1.1  Java基本数据类型

整数类型:byte、short、int、long,int是默认类型。

浮点类型:float和double,double是默认类型。

字符类型:char。

布尔类型:boolean。

2.Kotlin的基本数据类型

下面就是Kotlin的基本数据类型,基本和Java差不多,但是细心的同学会放下Kotlin的是大写的,与Java不同。而且Kotlin没有包装类,它会随着使用的场景自动的编译为Java的基本类型或者包装类(很智能)

整数类型:Byte、Short、Int和Long,Int是默认类型。

浮点类型:Float和Double,Double是默认类型。

字符类型:Char。

布尔类型:Boolean。

        val byte: Byte = 1             //byte类型

        val short: Short = 1            //Short类型

        val int: Int = 1                // Int类型

        val long: Long = 1L          //Long类型可以加L
        //var long1:Long=1l          //long类型只能加大写L

        val double: Double = 1.00      // Double类型

        val float: Float = 1.0F        // Float要加F或者f

        val char: Char = 'c'         //Char类型

        val string: String = "王"    //String类型

注意:在 Kotlin中Char不是数字

Java

  private char aChar = 1;  //编译通过

Kotlin

 var char:Char=1    //编译错误

2.1kotlin数据类型的范围

数据范围,我也记不得了,你可点击这里查看

2.2 Kotlin隐式转换

Kotlin 处理数字在某种程度上接近 Java,但是并不完全相同。例如,对于数字没有隐式拓宽转换(如 Java 中 int可以隐式转换为long),另外有些情况的字面值略有不同。

kotlin的隐式转换只能在数学计算:

规律是这样的:

首先同类型计算不变(Int+Int=Int)   没有问题

2.2 Kotlin显式转换

 fun main(args: Array<String>) {
        var int: Int = 1
        var byte: Byte = 1
        int = byte   //错误
        int = byte.toInt()  //正确
    }

Kotlin的转换使用to**,转成什么就to什么,看栗子

栗子:

很简单吧

3.Kotlin的可空类型

在Kotlin里有一种类型叫可空类型,这也是Kotlin在预防空指针异常的优点。

在Kotlin只有可空类型才可以接受空值!

栗子1

  fun main(args: Array<String>) {

        var string: String = null    //编译错误

        var string1: String? = null   //编译正确
    }

在Kotlin里在类型后面加一个?就是可空类型。但是为了安全可空类型不能直接赋值给非可空类型。

栗子2

        var string: String

        var string1: String? = null   //编译正确

        string = string1    //错误

        string1 = string   //正确

栗子2很容易明白吧。

注意 可空类型在具体使用时会有一些限制:

  1. 不能直接调用可空类型对象的函数或属性。
  2. 不能把可空类型数据赋值给非空类型变量。
  3. 不能把可空类型数据传递给非空类型参数的函数。

但是有时候我们要使用的场景要突破这些限制

安全调用运算符:?.

安全转换运算符:as?

Elvis运算符:?:

非空断言:!!

举例子 非空断言:


      
        var int1: Int? = 1
        var int2: Int? = 1

        var int3: Int = int1 + int2      //编译错误

        var int4: Int = int1!! + int2!!   //在值后面加上断言,编译通过

注意:断言只有在你很确定的时候再使用,否则很可能引发空指针异常,还有一个注意点

 你注意最后一行的到int1和int2的颜色不一样了吗?

这次我把int3和int4换行了,结果报错了。想知道为什么吗?

因为断言一旦编译器知道了不为空,下面在一定区域编译器默认它不为空了。什么一定区域?多大?自己去试试吧!

Elvis运算符 栗子:

在网络请求,有时候我们知道会返回空,但是我们又不想要null怎么办?

        var string: String? = "wang"
        var string1: String? = null

        var string3: String = string1 ?: "wang"  //此时string3=wang

安全调用运算符:?.  栗子:

        var int1: Int? = null
        var int2: Int = 1

        var int3: Int? = int1?.plus(1)
        println(int3)

这段代码在Java中就抛异常了,因为null+1.好好体会,哈哈。而结果是打印的null。

使用安全调用运算符我们的结果为null时,只会返回结果为null,而不会抛异常。

数据类型就简单讲这些,请访问官网,或者百度

二、代码规范

编程语言离不开代码规范,为什么我要在这讲代码规范,因为刚经过了一些练习,所以我想在这讲一些简单,而又重要的代码规范。我也不仔细讲了,帮你列出来吧!

  1. 变量名使用驼峰命名法
  2. 常量名全部大写
  3. 重载布局(就是重载的方法等放在一起,方便找到)

  4. 具体查看(太多了不想一一列出,但是请不要忽略,至少看看吧)

本节就到这里了,希望你把之前的都掌握了

猜你喜欢

转载自blog.csdn.net/qq_41346910/article/details/86739000