入门
package com.fyx.s1
fun main() {
println("Hello World")
}
声明变量
- var 标识可读可写
- name 变量名
- String 变量类型
- “Tom” 默认值
fun main() {
var name: String = "Tom"
println(name)
name = "Jack"
println(name)
}`
常用类型
Kotlin | Java | 描述 |
---|
Int | Intger | 整型 | Double | double | 小数 | Float | float | 小数 | String | String | 字符串 | Char | char | 单字符 | Boolean | boolean | 布尔值 | List | List | 集合 | Set | Set | 不可重复集合 | Map | Map | 键值对 |
val 只读变量
val用于声明只读变量,不可修改
package com.fyx.s1
fun main() {
val name: String = "Tom"
println(name)
name = "Jack"
}
类型推断
声明变量不需要声明类型,Kotlin根据值来自动推断类型
fun main() {
val name="范源鑫"
var flag=true
}
编译时常量
编译时常量只能定义在函数之外,使用const 定义
package com.fyx.s1
const val name ="Jack"
fun main() {
const val name="范源鑫"
}
运行原理
Kotlin运行底层是将代码转换成复合JVM编译的代码执行的 Kotlin代码 Kotlin字节码 JVM可执行代码
引用类型
- java语言有两种数据类型一种是基本类型(int double等) 一种是引用类型(String等)
- 而在Kotlin语言只有一种,看起来是引用类型,但是在编译期间会自动转换为基本类型
Kotlin代码
package com.fyx.s1
fun main() {
var age: Int =13;
var level: Float =13.01f
}
编译后的代码
package com.fyx.s1;
import kotlin.Metadata;
@Metadata(
mv = {1, 1, 16},
bv = {1, 0, 3},
k = 2,
d1 = {"\u0000\b\n\u0000\n\u0002\u0010\u0002\n\u0000\u001a\u0006\u0010\u0000\u001a\u00020\u0001¨\u0006\u0002"},
d2 = {"main", "", "kt_base"}
)
public final class KtBase1Kt {
public static final void main() {
int age = true;
float level = 13.01F;
}
public static void main(String[] var0) {
main();
}
}
由此可见JVM会默认将看似是引用过类型转换为基本数据类型
range 表达式
range 范围 从哪里 到哪里
package com.fyx.s1
fun main() {
var age=18
if(age in 10..18){
println("如花")`在这里插入代码片`
}else if(age in 19..29){
println("人妻")
}else if(age in 30..39){
println("母老虎")
}else {
println("不是人")
}
}
when 表达式
类比Java中的Switch
package com.fyx.s1
fun main() {
var age = 10
val mes = when (age) {
1 -> "今天是周一"
2 -> "今天是周二"
3 -> "今天是周三"
else -> "什么都不是"
}
println(mes)
}
字符串模板和if表达式
package com.fyx.s1
fun main() {
var park="人民路"
var foot="蛋炒饭"
println("今天我去了$park 吃了一顿$foot 味道很不错")
var flag =true
println("你真的很${if(flag) "很漂亮" else "不漂亮"}")
}
Kotlin中定义函数
默认不写修饰符是 public
- fun 声明函数
- kotlin 函数是现有入参再由出参,这里跟java是相反的
package com.fyx.s1
fun main() {
println(convert("小西",18))
}
fun convert(name: String, age: Int): String {
println("我的名字是$name, 我今年$age 岁了");
return "我的名字是$name, 我今年$age 岁了"
}
函数默认值
fun main() {
println(convert("小西",18))
println(convert("小西"))
}
fun convert(name: String, age: Int=19): String {
return "我的名字是$name, 我今年$age 岁了"
}
具名参数
- 具名参数的意义在于不需要按照函数的字段顺序传入,只需要和参数的名称保持一致即可
package com.fyx.s1
fun main() {
convert(age=20,name="老王")
}
fun convert(name: String, age: Int=19): String {
return "我的名字是$name, 我今年$age 岁了"
}
|