环境
android studio
创建项目时需要点击:include kotlin
创建kotlin文件:new Kotlin File(位置在new java class下面一格)
基础语法
var age :int = 18//声明一个变量
val name : String = “zhang san”//声明不可变变量,非常量
val name2 : String = null//编译器会报错不能为空
fun 关键字来定义函数
$符调用参数
package kt.zj.com.ktlearn
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var age: Int = 18;
val name: String = "lucy";
who(name,age);
}
fun who(name :String,age :Int){
// println(name + "_________" + age);
println("$name" + "_________" + "$age" );
}
}
与java互调用
.举例1:静态互调
ktolin函数能直接写在文件里面,而不用写在类里面的
kotlin文件在编译之后依旧是jvm平台的一个class
一个用java调用kotlin函数的例子:
注意:kotlin文件名带kt后缀,且java调用者函数是静态。
JavaUseKotlin.java
package kt.zj.com.ktlearn;
public class JavaUseKotlin {
public static void main(String[] args) {
UtilsKt.sayHello();;
}
}
Utils.kt
package kt.zj.com.ktlearn
fun sayHello(){
println("hello");
}
.举例2:将类作为参数传递
1.kotlin文件被编译成的并不是class字节码,而是叫做Kclass的字节码文件
2.kotlin文件必须声明类名,否则不识别class KotlinMain
3.实验场景:
- 创建一个javaMain.class
- 创建一个kotlinMain.kt(并声明类名)
- 在kotlin测试类里定义2个函数testClass,并实验测试函数
//测试函数 fun main(args : Array<String>){ testClass(javaMain::class.java)//入参为javaClass时,记得添加后缀.java testClass(KotlinMain::class)//入参为KClass时,直接调 } //ps:在实际过程中,.java后缀由ide自己给我们补全了。
//入参为javaClass时,记得添加后缀.java
fun testClass(clazz :Class
println(clazz.simpleName);
}
//入参为kClass
fun testClass(clazz :KClass
println(clazz.simpleName);
}
### .举例3:kotlin与java在关键字上的冲突
问题条件1:
在java中又一个变量,变量名叫in;
public class javaMain {
public static String in = “in”;
}
在kotlin中,in是一个关键字,所以kotlin在调这个变量时,不能直接调用,需要用2个反引号包裹,表示去解决这个冲突;
println(javaMain.in
);
ps:在实际过程中,反引号包裹由ide自己给我们补全了。
## 排错
Kotlin reflection implementation is not found at runtime. Make sure you have kotlin-reflect.jar in the classpath
at …
```
解决:
https://majing.io/posts/10000007151189