一、变量、常量、引用类型
/**
* 定义编译时常量
* 编译时常量只能是基本的类型(String, Int, Double, Float, Short,Boolean, Long, Byte, Char)
* 编译时常量只能在函数之外定义,为什么?如果在函数之内定义,必须在函数运行时才能给常量赋值,何来编译时常量一说
* 结论:只能在函数之外定义,就可以在编译阶段初始化了
*/
const val PI = 3.1415
class KtBaseTest01 {
companion object {
const val TAG = "KtBaseTest01"
}
fun test01() {
/**
* 可读可改 变量名 变量类型 值
* var name : String = "lanny"
*/
var name : String = "lanny"
name = "levone"//var变量可以改变值
println(name)
Log.d(TAG, "test01==>name="+name)
/**
* 不可改变的(只读变量) 变量名 变量类型 值
* val age : Int = 26
*/
val age : Int = 26
// age = 30//提示报错,变量不能被修改
print(age)
Log.d(TAG, "test01==>age="+age)
/**
* 类型自动推断
*/
val info : String = "hello world"
val info1 = "hello world"// 自动推断为String类型,类型可省略
val info2 = 99//Int类型
}
fun test02() {
Log.d(TAG, "test02==>PI="+PI)
/**
* 编译时常量不可修改值
*/
// PI = 45
/**
* 编译时常量只能在函数之外定义
* 修饰符const不适用于局部变量
*/
// const val PI2 = 3.1415
}
/**
* 学习查看kotlin反编译后字节码
* Android Studio->Tools->Kotlin->Show Kotlin Bytecode
*
* L0
* LINENUMBER 71 L0
* BIPUSH 99
* ISTORE 1
* L1
* LINENUMBER 72 L1
* LDC "\u4f60\u597d\u5417"
* ASTORE 2
* L2
* LINENUMBER 73 L2
* ICONST_0
* ISTORE 3
* L3
*/
fun test03() {
val number1 = 99
var number2 = "你好吗"
var isShowLog = false
}
/**
* kotlin 引用类型
*
* java中有两种数据类型:
* 1.基本类型int, boolean...等
* 2.引用类型String
*
* kotlin语言只有一种数据类型:
* 看起来都是引用类型,实际上编译器会在java字节码中,修改成“基本类型”
*/
fun test04() {
val num1 : Int = 11
var str1 : String = "好得很"
var isLoad : Boolean = true
}
}
二、range/when表达式、字符串模板
const val TAG = "KtBaseTest02"
class KtBaseTest02 {
/**
* range表达式 范围 从哪里..到哪里
*
* number in 1..59
*/
fun test01() {
val number = 100
if(number in 1..59) {
Log.d(TAG, "test01==>不及格")
} else if (number in 60..79) {
Log.d(TAG, "test01==>及格")
} else if (number in 80..100) {
Log.d(TAG, "test01==>牛逼")
} else {
Log.d(TAG, "test01==>分数不在范围内")
}
}
/**
* when表达式
* java中when是语句
* kotlin中when是表达式,有返回值的
* if和when同理
*/
fun test02() {
var day = 0
val result = when(day) {
1 -> "星期一"
2 -> "星期二"
// else -> "日期不对"
else -> {
"日期不对"
}
}
println(result)//void 关键字无返回,用Unit代替了java的void关键字
Log.d(TAG, "test02==>result="+result)
}
/**
* kotlin 字符串模板
*/
fun test03() {
val addr = "故宫"
val hour = 3
Log.d(TAG, "我去$addr 玩了, 玩了$hour 小时")//java写法
Log.d(TAG, "我去${addr} 玩了, 玩了${hour}小时")//kt 字符串模板写法
//java中if是语句,有局限性
//,kt中if是表达式,有返回值,所以更灵活
val isLogin = false
Log.d(TAG, "登陆结果: ${if (isLogin) "login success" else "login failure"} ")
}
}
网友评论