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}")))
}