参考资料:
参考资料
- 1、kotlin编译原理是先编译为class文件,再在java 虚拟机上执行
- 2、变量
- var = 1 变量
- val = 2 常量
- kotlin存在类型推导机制
- var c:Int = 1
- kotlin不存在基本类型,将全部使用对象类型
- 3、函数
- fun test(){}
- fun add(a:Int,b Int):Int{
- return a+b;
- }
- 由于存在类型推导,所以:
- fun add(a:Int,b:Int) = a+b
- 函数的调用
- fun main(){
- test()
- println(add(1,2))
- }
- 4、选择语句
- if when:
- fun max(int:a,int b):Int{
- if(a>b) return a
- else return b
- }
-
- kotlin的if可以包含返回值, if语句的最后一行会作为返回值返回
- fun max(a:Int,b Int):Int{
- return if(a>b) a else b;
- }
- kotlin的if必须有else,否则会报错
- fun getScore(name:String) = if(name=="Tom") "不及格"
- else if(name == "Jim") "良好"
- else if(name == "Fiona") "优秀"
- else "名字非法"
- Kotlin中的== 是Java中的equal,比较的是 内容
- Kotlin中的===是Java中的==,比较的是引用
- when的实现也必须要有else,否则会报错
- fun getScore(name:String):String = when(name){
- "Tom"->"不及格"
- "Jim"->"及格"
- "Fiona"->"优秀"
- else->"名字非法"
- }
- when支持参数检查
- fun checkNumber(num:Number){
- when(nun){
- is Int->println("Int")
- is Double->println("double")
- else println("others")
- }
- }
- when 可以不传递参数
- fun getScore(name:String) = when{
- name == "Tom" ->"不及格"
- name == "Jim" ->"及格"
- name == "Tony"->"良好"
- name == "Fiona"->"优秀"
- else ->"名字非法"
- }
- fun getSore(name:String) = when{
- //若name以Tom开头则命中此分支
-
- }
- 5、循环语句
- when和Java差不多 for-in是对Java for-each的加强
- val range = 0..10
- 双闭区间
- fun main(){
- var range = 0..10
- for(i in range){
- println(i)
- }
- }
- 左闭右开
- fun main(){
- var range = 0..10
- for(i in 0 until 10){
- println(i)
- }
- }
- 跳步
- fun main(){
- var range = 0..10
- for(i in 0 until 10 step 2){
- println(i)
- }
- }
- 降序
- fun main(){
- var range = 0..10
- for(i in 10 downTo 1){
- println(i)
- }
- }
- 6、类和对象的初始化
- class Person{
- var name = ""
- var age = 0
- fun printInfo(){
- println(name+"'s age is "+name)
- }
- }
- 使用person类
- fun main(){
- Person p1 = Person()
- p1.name = "Finoa"
- p1.age = 12
- p1.printInfo()
- }
- 继承
- class Student : Person{
- var grade = ""
- var name = ""
- var age = 0
- fun study(score:Int):Int{
- println("score is "+score)
- return score
- }
- }
- final修饰的类不可以被继承、需要使用open关键字修饰
- open class Person{
- ...
- }
- 构造
- 主构造
- class Student(var name:String,var age:Int) :Person{
- }
- open class Person(var name:String,var age:Int){
- }
- 继承有参构造的类
- class Student(var name:String,var age:Int,var score:String):Person(name,age){
- ...
- }
- 次构造
- 无参构造,字符串默认为"",Int默认为0
- class Student(name:String,age:Int,score:String,grade:Int):Person(name,age){
- constructor(name:String,age:Int,score:String):this(name,age,score,0)
- constructor():this("",0,"",0){
- }
- }
- fun main(){
- Student s1 = Student("Jimmy",10,"88",1)
- Student s2 = Student("Fiona",18,"98")
- Student s3 = Student()
- }
- 无主构造
- 如类不使用主构造,则后续继承类也不需要使用构造即可去掉继承类的(),次构造可以调用父类构造super进行初始化,但是次构造的参数在其他地方无法引用
- class Student:Person{
- constructor(name:String,age:Int,number:String):super(name,age){
-
- }
- fun study(){
- println(name,age)
- println(number)报错,若number是主构造的参数则可引用
- }
- }
- 7、接口
- interface Study{
- fun study()
- fun readBooks()
- fun doHomework()
- }
- 继承接口只需使用,进行拼接,并需要实现接口的所有函数
- class Student(name:String,age:Int,grade:string):Person(name,age),study{
- override fun study()
- }
- kotlin支持接口方法的默认实现,则继承类无需必现实现此方法
- 8、数据类和单例类
- 数据类只处理和数据相关的,如get、set、hashCode、equals、toString
- 9、Lambda
- 集合的创建和遍历
- list:
- fun main(){
- val list = ArrayList<Int>()
- list.add(1)
- list.add(2)
- list.add(3)
- val list1 = listOf<Int>(1,2,3,4,5)
- list1.add(6)//listOf不可变,只可查
- }
- map:
- fun main(){
- 可变
- val map = HashMap<String,String>()
- map.put("1","Jimmy")
- map["2"] = Tommy
- println(map.get("1"))
- println(map["2"])
- 不可变
- val map1 = mapOf<String,String>("3" to "Fiona","4" to "whilt")
- 可变
- val map2 = mutableMapOf<String,String>("5" to "Kevin",6 to "Dabby")
- 遍历
- for((key,value) in map){
- println("key is "+key +" value is "+value)
- }
- }
- lambda可以传递代码
- 参数名1:参数类型,参数名2:参数类型->函数体
- fun main(){
- val list = listOf<String>("a","aba","aabb","a")
- var maxStr = ""
- for(str in list){
- if(str.length>maxStr.length) maxStr=str
- }
- println("max is "+maxStr)
- }
- kotlin把空指针异常检查提前到了编译期,若空指针则会报错
- java的做法
- public void Student(Study study){
- if(study==null){
- return;
- }
- study.doHomework()
- study.doExtrawork()
- }
- kotlin的做法
- fun Student(study:Study){
- study.doHomework()
- study.doExtraWork()
- }
- fun main(){
- Student s1 = Student(null)//kotlin这么写会报错
- Student s2 = Student(Study())//ok
- }
- ?的意思是当前参数可为空,如果可为空的话,则此对象调用的方法必须要保证不为空,说白了如果使用?就表示参数对象可为空,因此就不要调参数对象的方法了,毕竟这个对象都可能为空
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |