kotlin

打印 上一主题 下一主题

主题 822|帖子 822|积分 2466

参考资料:
参考资料
  1. 1、kotlin编译原理是先编译为class文件,再在java 虚拟机上执行
  2. 2、变量
  3. var = 1 变量
  4. val = 2 常量
  5. kotlin存在类型推导机制
  6. var c:Int = 1
  7. kotlin不存在基本类型,将全部使用对象类型
  8. 3、函数
  9. fun test(){}
  10. fun add(a:Int,b Int):Int{
  11.         return a+b;
  12. }
  13. 由于存在类型推导,所以:
  14. fun add(a:Int,b:Int) = a+b
  15. 函数的调用
  16. fun main(){
  17.         test()
  18.         println(add(1,2))
  19. }
  20. 4、选择语句
  21. if when:
  22.         fun max(int:a,int b):Int{
  23.                 if(a>b) return a
  24.                 else return b
  25.         }
  26.        
  27.         kotlin的if可以包含返回值, if语句的最后一行会作为返回值返回
  28.         fun max(a:Int,b Int):Int{
  29.                 return if(a>b) a else b;
  30.         }
  31.         kotlin的if必须有else,否则会报错
  32.         fun getScore(name:String) = if(name=="Tom") "不及格"
  33.         else if(name == "Jim") "良好"
  34.         else if(name == "Fiona") "优秀"
  35.         else "名字非法"
  36.         Kotlin中的== 是Java中的equal,比较的是 内容
  37.         Kotlin中的===是Java中的==,比较的是引用
  38.         when的实现也必须要有else,否则会报错
  39.         fun getScore(name:String):String = when(name){
  40.                 "Tom"->"不及格"
  41.                 "Jim"->"及格"
  42.                 "Fiona"->"优秀"
  43.                 else->"名字非法"
  44.         }
  45.         when支持参数检查
  46.         fun checkNumber(num:Number){
  47.                 when(nun){
  48.                         is Int->println("Int")
  49.                         is Double->println("double")
  50.                         else println("others")
  51.                 }
  52.         }
  53.         when 可以不传递参数
  54.         fun getScore(name:String) = when{
  55.                 name == "Tom" ->"不及格"
  56.                 name == "Jim" ->"及格"
  57.                 name == "Tony"->"良好"
  58.                 name == "Fiona"->"优秀"
  59.                 else ->"名字非法"
  60.         }
  61.         fun getSore(name:String) = when{
  62.                 //若name以Tom开头则命中此分支
  63.                
  64.         }
  65. 5、循环语句
  66. when和Java差不多      for-in是对Java for-each的加强
  67. val range = 0..10
  68. 双闭区间
  69. fun main(){
  70.         var range = 0..10
  71.         for(i in range){
  72.                 println(i)
  73.         }
  74. }
  75. 左闭右开
  76. fun main(){
  77.         var range = 0..10
  78.         for(i in 0 until 10){
  79.                 println(i)
  80.         }
  81. }
  82. 跳步
  83. fun main(){
  84.         var range = 0..10
  85.         for(i in 0 until 10 step 2){
  86.                 println(i)
  87.         }
  88. }
  89. 降序
  90. fun main(){
  91.         var range = 0..10
  92.         for(i in 10 downTo 1){
  93.                 println(i)
  94.         }
  95. }
  96. 6、类和对象的初始化
  97. class Person{
  98.         var name = ""
  99.         var age = 0
  100.         fun printInfo(){
  101.                 println(name+"'s age is "+name)
  102.         }
  103. }
  104. 使用person类
  105. fun main(){
  106.         Person p1 = Person()
  107.         p1.name = "Finoa"
  108.         p1.age = 12
  109.         p1.printInfo()
  110. }
  111. 继承
  112. class Student : Person{
  113.         var grade = ""
  114.         var name = ""
  115.         var age = 0
  116.         fun study(score:Int):Int{
  117.                 println("score is "+score)
  118.                 return score
  119.         }
  120. }
  121. final修饰的类不可以被继承、需要使用open关键字修饰
  122. open class Person{
  123.         ...
  124. }
  125. 构造
  126. 主构造
  127. class Student(var name:String,var age:Int) :Person{
  128. }
  129. open class Person(var name:String,var age:Int){
  130. }
  131. 继承有参构造的类
  132. class Student(var name:String,var age:Int,var score:String):Person(name,age){
  133. ...
  134. }
  135. 次构造
  136. 无参构造,字符串默认为"",Int默认为0
  137. class Student(name:String,age:Int,score:String,grade:Int):Person(name,age){
  138.         constructor(name:String,age:Int,score:String):this(name,age,score,0)
  139.         constructor():this("",0,"",0){
  140.         }
  141. }
  142. fun main(){
  143.         Student s1 = Student("Jimmy",10,"88",1)
  144.         Student s2 = Student("Fiona",18,"98")
  145.         Student s3 = Student()
  146. }
  147. 无主构造
  148. 如类不使用主构造,则后续继承类也不需要使用构造即可去掉继承类的(),次构造可以调用父类构造super进行初始化,但是次构造的参数在其他地方无法引用
  149. class Student:Person{
  150.         constructor(name:String,age:Int,number:String):super(name,age){
  151.                
  152.         }
  153.         fun study(){
  154.                 println(name,age)
  155.                 println(number)报错,若number是主构造的参数则可引用
  156.         }
  157. }
  158. 7、接口
  159. interface Study{
  160.         fun study()
  161.         fun readBooks()
  162.         fun doHomework()
  163. }
  164. 继承接口只需使用,进行拼接,并需要实现接口的所有函数
  165. class Student(name:String,age:Int,grade:string):Person(name,age),study{
  166.         override fun study()
  167. }
  168. kotlin支持接口方法的默认实现,则继承类无需必现实现此方法
  169. 8、数据类和单例类
  170. 数据类只处理和数据相关的,如get、set、hashCode、equals、toString
  171. 9、Lambda
  172. 集合的创建和遍历
  173. list:
  174. fun main(){
  175.         val list = ArrayList<Int>()
  176.         list.add(1)
  177.         list.add(2)
  178.         list.add(3)
  179.         val list1 = listOf<Int>(1,2,3,4,5)
  180.         list1.add(6)//listOf不可变,只可查
  181. }
  182. map:
  183. fun main(){
  184.         可变
  185.         val map = HashMap<String,String>()
  186.         map.put("1","Jimmy")
  187.         map["2"] = Tommy
  188.         println(map.get("1"))
  189.         println(map["2"])
  190.         不可变
  191.         val map1 = mapOf<String,String>("3" to "Fiona","4" to "whilt")
  192.         可变
  193.         val map2 = mutableMapOf<String,String>("5" to "Kevin",6 to "Dabby")
  194.         遍历
  195.         for((key,value) in map){
  196.                 println("key is  "+key +" value is "+value)
  197.         }
  198. }
  199. lambda可以传递代码
  200. 参数名1:参数类型,参数名2:参数类型->函数体
  201. fun main(){
  202.         val list = listOf<String>("a","aba","aabb","a")
  203.         var maxStr = ""
  204.         for(str in list){
  205.                 if(str.length>maxStr.length) maxStr=str
  206.         }
  207.         println("max is "+maxStr)
  208. }
  209. kotlin把空指针异常检查提前到了编译期,若空指针则会报错
  210. java的做法
  211. public void Student(Study study){
  212.         if(study==null){
  213.                 return;
  214.         }
  215.         study.doHomework()
  216.         study.doExtrawork()
  217. }
  218. kotlin的做法
  219. fun Student(study:Study){
  220.         study.doHomework()
  221.         study.doExtraWork()
  222. }
  223. fun main(){
  224.         Student s1 = Student(null)//kotlin这么写会报错
  225.         Student s2 = Student(Study())//ok
  226. }
  227. ?的意思是当前参数可为空,如果可为空的话,则此对象调用的方法必须要保证不为空,说白了如果使用?就表示参数对象可为空,因此就不要调参数对象的方法了,毕竟这个对象都可能为空
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表