Kotlin

250 阅读4分钟

theme: github highlight: zenburn

Kotlin学习

第二章Kotlin基础类型

2.1注释分为单行注释、多行注释、文档注释实例如下

单行注释: //你要注释的代码

多行注释: /* 你要注释的代码 */

文档注释:

/**

  • 文档注释

*/

/**
 * 文档注释
 * 这是我第一个Kotlin程序
 */
fun main(args: Array<String>) {
    //单行注释
    println("Hello,World")
   //println("单行注释:这行代码被注释了不会再执行")
   /*
    这都是多行注释
    println("hello,Kotlin")
    println("现在开始了,学习")
     */
}  

2.2声明变量

1.注意:kotlin中所有的变量必须先声明在使用,声明变量使用var,val,实例如下

var|val变量名:[:类型][=初始值]
//声明变量类型也指定了初始化值,使用var声明,是可以改变的,例如年龄
var age:Int=23 
      age=24
   println(age)//24    
      
//声明变量使用val,相当于一个常量,不可改变,例如你的性别
val gender:String="男"
  //gender=”女“这个编译时直接报错
——————————————————————————————————————————————————————————————————
//当然我们还可以这样直接声明初始化值,编译器会根据初始化值来确定变量类型为Int
var age=23
//编译器通过初始化值确定为String类型
val name="涛哥“

2.3整型

1.与Java类似,kotlin中也提供4中数据类型

Byte:Byte型整数在内存中通常占8位,表数范围在-128~127之间

Short:Short型整数在内存中占16位

Int:Int型整数在内存中占32位

Long:Long型整在内存中占64位

注意:但给出一个较大的整数时,该整数默认可能Long型,用这个整数给Int,Short,Byte赋值会报错,实例如下

fun main(args: Array<String>) {
    //这个是正确的
    var a:Int=45
    //隐式将999999999999转换为Int型使用,编译器会报错
    //var big:Int=999999999999
    //正确如下
    var big2:Long=9999999999999
}

2.4浮点型

1.Float:表示32位的浮点数

2.Double:表示64双精度浮点数

注意:如果声明一个变量或常量没有具体指出什么数据类型,只是初始化为浮点数,那么自动判断为Double型

fun main(args: Array<String>) {
   var a=2.34
    println(a.javaClass)//double
}

注意2:注意使用正浮点数除以0.0会得到一个正无穷大的数,反之是负无穷大,0.0除以0.0得到是非数与任何数都不相等

fun main(args: Array<String>) {
    var a=2.34f
    println(a/0.0)//Infinity正无穷大

    var b=-2.34f
    println(b/0.0)//Infinity负无穷大

    println(0.0/0.0)//NaN非数与任何数都不相等

3.数值之间的装换

**注意:在Kotlin中不支持隐式装换,支持显示装换,实例如下

//我们先看一个错误的示范
fun main(args: Array<String>) {
  var a:Float=2.34f
  var b:Double=a//直接报错
}

//正确的示范
fun main(args: Array<String>) {
  var a:Float=2.34f
  //必须吧Float型强转为Double型才可以
  var b:Double=a.toDouble()
}
------------------------------------
//基于上下代码 Byte+Short=Int,Long+Byte=Long  自动类型提升
fun main(args:Array<String>) {
    var a:Byte=23
    var b:Short=45
    var c=a+b
    println("${a}+${b}=${c}")
    println(c.javaClass)//int型
}

在Kotlin不支持char型值当整数型值用,但支持整数值当char值用

fun main(args:Array<String>) {
   var result=" "
    for (i in 0..5){
        //随机生成一个97-122之间的int正整数
        val intval=(Math.random()*26+97).toInt()
        //将inval墙转为char型拼接到result后面
        result+=intval.toChar()
    }
    println(result)
}

Boolean类型

fun main(args:Array<String){
  var b1:Boolean=true
  var b2:Boolean=false
}


fun main(args:Array<String>) {
    var b1:Boolean=true
    var b2:Boolean=false
    //字符串中"true"和"false"不会直接转换为boolean类型,
    但boolean类型变量可以插值到字符串中
    var str:String="${b1}代表真"
    println(str)
}
---------------------------
fun main(args:Array<String>) {
    var i=1
//    if (i){
//        println('啊大大')错误
//    }
    if (i==1){
        println("ada")
    }
}

null安全

kotlin是null安全的语言

Int?只有可空类型的变量才能接受null,Int不能接受null值,可空类型不可以直接调用方法和访问属性

fun main(args:Array<String>) {
    var sk:String="skit"
    var sk2:String?="skit"
   // sk=null//错误
      sk2=null//正确
    println(sk.length)
    //println(sk2.length) 可空类型

}

可空类型要调用方法就必须先判断避免NUE

fun main(args:Array<String>) {
    var sk:String?="skit"
    var len=if (sk!=null) println(sk.length)else -1
    println(len)

    sk=null
    if (sk!=null&&sk.length>0){
        println(sk.length)
    }else
        println("空字符串")
}

强制调用 !! 容易发生NPE

import com.sun.prism.null3d.NULL3DPipeline

fun main(args:Array<String>) {
    var a:String?="skit"
    println(a!!.length)

    a=null
    println(a!!.length)//NPE
}

Elvis运算

fun main(args:Array<String>) {
    var b:String?="skit"
    val len=if (b!=null) println(b.length)else -1
    println(len)//4
    b=null
  /**
  如果"?."左边表达式不为空,则返回左边表达式的值,否则返回右边的
  */
    val len2=b?.length?:-1
    println(len2)//-1
}

字符串 可以通过索引来访问指定索引处的字符

fun main(args:Array<String>) {
    var sk="asdfadfafsa"
    println(sk[0])
    //便利
    for (s in sk){
        println(s)
    }
}

普通字符串 var a ="sdsdsdsdsd"
原始字符串

fun main(args:Array<String>) {
    var str="sfsfsfsfsf"
    print(str.length)
    //原始字符串
    var txt=""" 
        ~阿尔法法无法玩
        ~驱蚊器无群无去
        ~千万千万千万
        ~千万千万千万
    """.trimMargin("~")
    println(txt)
}

字符串模板

fun main(args:Array<String>){
    var temp="印度阿三"
    var txt=""" 
        ${temp}阿达瓦大无多
        ${temp}阿发我翻翻
        ${temp}阿瓦我凤娃 
    """.trimIndent()
    println(txt)
}
------------------------
fun main(args:Array<String>){
     val bookPrice=79
     //在字符串模板中嵌入变量
    var s="图书的价格为:${bookPrice}"
    println(s)

    val rand=java.util.Random()//创建java Random的对象
    val s2="伪随机数是:${rand.nextInt(10)}"
    println(s2)//9

    val mtstr="fkjava.org"
    println("${mtstr}的长度为${mtstr.length}")


}

Kotlin字符串的方法

fun main(args:Array<String>){
  //将字符串转换为double
    var a="23.345"
    var a2 =a.toDouble()
    println(a2)
 //将字符串装换为int
    var b="23"
    var b2=b.toInt()
    println(b2)
  
  //将字符串首字母大写
   val str="fssdsds"
    println(str.capitalize())//首字母大写
    println(str.decapitalize())//首字母小写
}
---------------------------------------------
fun main(args:Array<String>){
  //返回两个字符串相同的前和后
    var str2="crazyit.org"
    println(str2.commonPrefixWith("crazyjava.org"))//crazy
    println(str2.commonSuffixWith("fkit.org"))//it.org
    //正则表达式匹配
    var str3="java886"
    //判断str3是否包含3个连续的数字
    println(str3.contains(Regex("\\d{3}")))

}