kotlin之新手入门(1)

前言
    自从谷歌正式宣布将Kotlin作为android开发的第一语言后,估计所有的安卓程序员此时的内心应该是:“MD,又要学习新的语言了”,我也同样如此。所以就记录一下自己认为对自己有帮助的知识点,以供查询。

1.变量的定义
  ( 1) java中我们一般定义变量是:
          String str = "name";
       而Kotlin的定义是:
          var str:String = "name"
  (2) java中定义final变量的写法
          final String str = "name";
       而Kotlin的定义是:
          val str:String =  "name"
   简单来说,var是可变的,val是不可变的

2.函数的定义
  java中我们一般定义函数(方法)是(无返回值):
    public void testName(String name){
    ......
   }
   对应Kotlin中的定义是:
    fun testName(name:String){
    ......
   }
  java中定义函数(方法)是(有返回值):
    public String testName(String name){
    ......
   }
  对应Kotlin中的定义是:
    fun testName(name:String) : String{
    ......
   }

3.数组的定义
  java的数组一般定义有:
   String[] names = new String[]{"tom","jack};
   String[] emptyNames = new String[5];
  K otlin中对应的定义为:
   val names:Array<String> = arrayOf("tom","jack")
   val emptyNames : Array<String?> = arrayOfNulls(5)
  其中,Array<T> T即数组元素类型。String?表示可以为null的String类型
数组的使用基本一致。需要注意的是,为了避免装箱和拆箱的开销,Kotlin对基本类型包括Int、Short、Byte、Long、Float、Double、Char等基本类型提供了定制版数组类型,写法为XArray,例如Int的定制版数组为IntArray,如果我们要定义一个整型数组,写法如下:
   val ints = intArrayOf(1,2,3)

4.集合的定义
  (1) List集合在Kotlin中是不可变的,创建之后是不允许作任何的修改操作的
       a.可以用listOf来创建含有元素的List,数据类型由kotlin根据初始化元素自动进行推断
         val list = listOf("tom","jack")
       b.可以用emptyList<T>() 创建空List,但是必须显示指定数据类型
         val list = emptyList<String>() 
  (2) MutableList是可变的List.
        val mList =  mutableListOf<String>()
       mList.add("tom")

5.如何实例化类
   java中,在构造对象时需要用到new这个关键字:
      Date date = new Date();
   Kotlin构造对象时,不需要new这个关键字:
      val date = Date()

6.如何延迟初始化成员变量
   java定义的类成员变量如果不初始化,那么基本类型被初始化为其默认值,比如int初始化为0,boolean初始化为false,非基本类型的成员则会被初始化为null
    public class Hello{
      private String name;
    }
在Kotlin中被直译为:
    class Hello{
      private var name:String? = null
    }
 使用了可空类型后,副作用就是后面每次你想要用name的时候,都需要判断其是否为null:name!!。如果不使用可空类型,需要加  lateinit关键字:
    class Hello{
      private lateinit var name: String
   }
 lateinit是用来告诉编译器,name这个变量后续会妥善处置的。
对于final的成员变量,java要求他们必须在构造方法或者构造块当中对他们进行初始化:
    public class Hello{
      private final String name = "tom";
   }
也就是说,如果我想定义一个可以延迟到一定实际再使用并初始化的final变量,这在java中是做不到的。
Kotlin中有办法,使用lazy这个delegate即可:
  class Hello{
    private val name by lazy{
       NameProvider.getName()
   }
}

7.如何获得class的实例
java当中
  public class Hello{
    ......
  }
  ......
  Class<?> clazz = Hello.class;

  Hello hello = new Hello();
  Class<?> clazz2 = hello.getClass();
前面我们展示了两种获得class的途径,一种直接用类名,一种通过类实例。
Kotlin中对应的获取方法:
  class Hello
 
   val clazz = Hello::class.java

  val hello = Hello()
  val clazz2 = hello.javaClass
同样效果的Kotlin代码看上去确实很奇怪,实际上Hellp::class拿到的是Kotlin的kclass,这个是Kotlin的类型,如果想要拿到java的Class实例,就需要前面的方法了
     

  


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值