Kotlin基础学习笔记 (二)

一、定义
Kotlin是一门能够运行在java虚拟机、Android、浏览器上的静态语言与Java 100%兼容。
 
二、数据类型
 
 2.一、Numbers 基本数据类型
     Boolean数据类型
val aBoolean: Boolean = true; // val 变量名:变量类型= 赋值
 
Number数据类型
Type       
Bitwidth
Long
64
Int
32
Short
16
Byte
8
Double
64
Float
32  
 
 val aFloat :Float =2.0F(不加F是双精度浮点型)
 val minFloat :Float = -Float.Max_VALUE
 0.0F/0.0F != Float.NaN 不是数
 
Integer :装箱类型
int : 基本类型
Kotlin:Int = 基本类型+装箱类型 :合体
 
2.二、字面量
    十进制:1
    Longs 类型大写L :1L
    十六进制:0x01
    二进制:0b0000 0001
    八进制:无| 不支持八进制
 
2.三、字符串:
字符串String 不可变类型
字符char类型,一个char类型占2个字节,表示一个16位字符
 
转意符:由转义字符、原声字符串、换行和任意文本
\t : 制表符
\b: 光标后退一个字符
\n: 回车换行符
\r: 光标回到行首
\' : 单引号
\": 双引号
\\ : 反斜杠
\$ : 美圆符号
 
Characters
    Characters 用 Char表示;用单引号表示Chararacter;能够调用显示转换把Character转换为Int
Char 相似 于Java的基本类型 char ,Char?相似于Java引用类型Character。
 
字符串模版表达式——以$符号开始 ,内部是一个任意表达式
 两个整型相加母版:
println("$anInt+$anotherInt= ${anInt + anotherInt}")
 
美圆符号
val salary : Int = 1000
print(“$$salary”) ===》$1000
 
原生字符串:
使用 引号三个(””") 引发来的String,内部没有转义,经过 “空格”分开进行转意
 
字符串比较:
a=b :赋值;在逻辑运算时有效
a ==b :等于运算;标示比较内容或是值,而不是引用;即相似于java的equals
a ===b ,彻底等于运算;表示比较对象是否相同,是否为同一个,比较对象的引用值(同时也比较值)
 
基本类型的转换——kotlin不支持隐式转换
-val anInt : Int =5 
-val aLong : Long =anInt.toLong();  //显示转换
 
Numbers类型支持以下的转换:
toByte() :Byte
toShot() :Short
toInt() :Int
toLong() :Long
toFloat() :Float
toDouble() :Double
toChar() :Char
 
 
    2.四、类和对象
类:一个抽象的概念,具备某些特征的事物的归纳,不特定指代任何一个具体的食物
class <类名> ( 构造方法) {<成员>... }
         类和对象的关系
  •     一个类一般能够有不少具体的对象
  •     一个对象本质上只能从属于一个类
    Class (1)—————对应关系——————object(1…n)
 
     2.5  类的继承
  •     提取多个类的共性获得一个更抽象的类,便是父类
  •     子类拥有父类的一切特征
  •     子类也能够自定义本身的特征
  •     全部的类都最终继承自Any,全部类的始祖
 
    ex,一个简单的对象及其构造方法:
            
class 妹子(var 性感: String,
        var 长发: String,
        var 甜美: String){
    //若无具体实现能够删掉{ }
    init {
        println("new 了一个妹子, 性格:$性感,长发:$长发,甜美:$甜美")
    }
}
val 我喜欢的妹子: 妹子 = 妹子("咪咪","黑色","声音")
 
 
 2.4.空类型和智能类型转换
 
空类型安全
java:在java中null会报空指针异常
kotlin:在kotlin中 任意类型都有可空和不可空两种
 
不可空类型 就相似与java中的基本数字类型,是原始的数字类型,好比,int,long,float,double等
可空类型 就至关于引用的数字类型,如integer,Long,Float,Double
 
ex 1:
判断name 是否为null的状态
old 示例写法: 
val name = xxx();
    if( name == null ){
        println(“xxxx”);
    }else{ 
        printlin(name.length)
    }
 
new 示例写法:
val name = xxx():
//若是name不为空就返回长度,不然返回null
println(name? .length)  
 
ex 2:
判断name 是否为null的状态,若为null则直接返回
 
old 示例写法:
    val name = xxx();
    if(name == null ) return 
 
new 示例写法:
//定义一个名为name的变量,它的值是xxx();若是xxx()返回的是null,就进行return——>”?:"
    val name:String = xxx()?:return 
 
“?: always 表达式”:判断问号以前的表达式;若是为空,则执行?后面的语句
    
注意:将getName()的值返回并赋值给name,这个name的类型是一个不可为null的String类型
val name : String = getName() ?: return 
println(name.length) //不然返回一个string类型的变量
 
ex 3:
对于一个可null的String类型,但值却不是null
 
    val value :String? = “FuckWorld”
       if( value is String )
       //在已经确定String 字符串不为null的状况下,可使用 “!!.” 进行表达式确定的阐述
        println(value !!.length)//  !!.强制承认空类型 nullable
 
类型转换异常
   val parent: Parent = parent()
    val child:Child ?= parent as? Child//若是转换失败则抛出异常(安全的类型转换)
       println( child ) //返回为null 
 
// 这里不能经过编译. User对象不能是null
 var notNullUser: User= null
 
 // User能够是 null 
var user: User? = null 
 
// 没法编译, user多是null,咱们须要进行处理
 user.print() 
 
// 只要在user != null时才会打印
 user?.print() 
 
// 使用Elvis操做符来给定一个在是null的状况下的替代值 
val name = user?.name ?: "empty” 
 
/** 若是user为可空类型,又必定要调用它的成员函数和变量,
*能够用 !! 操做符 两种可能,
*要么正确返回name,要么抛出空指针异常 当user为null,
*你不想返回null,而是抛出一个空指针异常,你就可使用它。 
**/
var name = user!!.name
 
 
任意类型都有可空和不可空两种:
-val notNull:String = null    //错误,不能为空
-val nullable: String?= null  //正确 ,能够为空 String可null类型
-notNull.length    //正确 ,不为空的值能够直接使用
-nullable.length    //错误, 可能为空,不能直接获取长度
-nullable !!.length  //正确,强制认定nullable不可空
-nullable ?.length  //正确 ,若nullable为空,返回空
 
智能类型转换
java style 类型转换
-val  sub : SubClass = parent asSubClass 
——相似于java的类型转换,失败则抛出异常
 
安全类型转换
-val  sub:SubClass ?= parent as?SubClass
——若是转换失败,返回null 不抛异常
 
智能类型转换
-if(parent is SubClass)parent.<子类的成员>
    ——编译器尽量的推导类型,远离无用的类型转换
-if(nullable != null) nullable.length
    ——正确!由于确认nullable不可空
 
2.5  包Package
 命名空间,限定一个类的使用范围,路径
 
2.6  区间Range
 
var ranger:IntRange=0..1024//闭区间 [0,1024] ,整形区间
    .. :rangeTo
var ranger_exclusive:IntRange=0 until  1024//半开区间 [0,1023] or [0,1024)
        until : CloseRange {
            CharRange / 
            ComparableRange /
             IntRange 
            / LongRange  }
 
var    emptyRange: IntRange = 0..-1 // 表示为空区间 
     i in 0..100 判断 i 是否再区间 [0,100]中 
        range.contains(50)  === 50 in range 
迭代: 
    for ( i in ranger_exclusive ) { 
                print (“ $i , “) 
    }
 
2.7 数组 
数组数组 ,数是数,组是组,合在一块儿就是组,就没有数了。
数组就是一系列的对象
 
基本写法:经过arrayOf 建立数组
    (1)包含数值的数组:val a:Array<String> = arrayOf(“yy”,”xx")
    (2)指定大小,元素位空的数组:val b: arrayOfNulls<String>(10)
    (3)函数数组: val c = Array(10, {i->(i+1).toString() } )
       (4)  kotlin 自带原始类型 数组: xxArrayOf (... )
val arrayOfInt:IntArray = intArrayOf(1 ,3 ,5 ,7)
val arrayOfChar:CharArray = charArrayOf(“i”,”a”,”m")
val arrayOfString:Array<String>=arrayOf( “me”,”is” ,”god"); //字符串数组
 
 
基本操做
    一、数组的大小
    arrayOfInt.size 
    二、 输出第i个元素:
        println( arrayOf对象名 [i])输出
   三、 给第i个元素赋值:
       array[i] =Hello(“给第i个成员赋值”)
   四、 拼接整个元素并去除其中的默认“,”
        arrayOfChar .joinToString( “” ) //去除中间的,
    五、字符串切割:取值array中的第2个和第3个元素
       arrayOfInt .slice( 1..2 ) //传入的是一个闭区间的元素
 
数组类型映射
Java type:  int[]  / String []
Kotlin type : kotlin.IntArray /  kotlin.Array<9out) String > !
相关文章
相关标签/搜索