1 语法入门
package com.example.kotlinstudy
var age: Int = 18
var name: String = "dindin"
var nameNotNull: String ? = null
fun main(args: Array<String>){
//name = nameNotNull!!
nameNotNull = nameNotNull
printLen(name)
}
fun printLen(str: String): String {
println("kotlin的模版语法:$str")
return str
}
2 kotlin调用java
package com.example.kotlinstudy
import kotlin.reflect.KClass
fun main(args: Array<String>){
// 在kotlin调用java类
testClass(JavaMain::class.java)
// 在kotlin调用kotlin类
testClass(KotlinMain::class)
// 用反引号解决java变量与kotlin关键字的冲突
println(JavaMain.`in`)
}
// 在kotlin调用java类
fun testClass(clazz: Class<JavaMain>) {
println(clazz.simpleName)
}
// 在kotlin调用kotlin类
fun testClass(clazz: KClass<KotlinMain>){
println(clazz.simpleName)
}
3 初学常见问题
- kotlin没有封装类,如:有int,没有Integer。可以用反射的方法调用封装类。
- kotlin类型空值敏感,如:
package com.example.kotlinstudy
import com.example.kotlinstudy.JavaMain.format
import kotlin.reflect.KClass
fun main(args: Array<String>){
function("")
}
// 在kotlin调用java类
fun function(str: String) {
val fmt1 = format(str) // String! 只会由编译器自己推断出来,我们无法声明。在kotlin中推断出是java中的类型
// println(fmt1.length) // Exception in thread "main" java.lang.NullPointerException
// val fmt2 : String = format(str) // Exception in thread "main" java.lang.IllegalStateException: format(str) must not be null
val fmt3 : String? = format(str)
println(fmt3?.length) // 空安全,如果变量为空,输出null,否则输出结果
}
java中定义的format函数:
public class JavaMain {
public static String format(String string) {
return string.isEmpty() ? null : string;
}
}
- kotlin没有静态变量与静态方法
package com.example.kotlinstudy
fun main(args: Array<String>){
Test.sayMessage("hello") // 在kotlin中调用
}
object Test {
@JvmStatic // 通过这里的注解Test类中的方法
fun sayMessage(msg: String){
println(msg)
}
}
加了@JvmStatic注解,java和kotlin都用同样的方式调用Test类中的sayMessage方法:
Test.sayMessage("hello")
不加@JvmStatic注解,Kotlin调用方式不变,但java中不同了:
Kotlin code:Test.sayMessage("hello")
java code: Test.INSTANCE.sayMessage("hello")