通过创建一个kotlin文件来了解Kotlin的基本使用


一、kotlin类文件


1.data class 数据类

data class KotlinBean(    var id: String = "",    var user: String = "",    var userName: String = "")

1.1.数据类对象也就是Java中我们常用的bean实体类,不过kotlin的相较于Java的bean类具有代码简洁性,可阅读性,以及代码量少了很多;
比如:

  • Java中需要对bean参数需要定义大量的get/set方法,
  • 如果需要使用该类的每一个参数的构造函数,Java还需要对每一个参数都要构造一次。



1.2.kotlin构造函数的使用
Kotlin可以对Kotlin定义的data class类有许多操作

class KotlinTest{    val a = KotlinBean()    val b = KotlinBean("id")    val c = KotlinBean("id","user")    val d = KotlinBean("id","user","userName")    val e = KotlinBean(user = "user")    val f = KotlinBean(user = "user",userName = "userName")}

java中调用data class类时,只支持以下两种

public class JavaTest {    KotlinBean a = new KotlinBean();    KotlinBean b = new KotlinBean("id","user","userName");}


2.Class类文件

2.1.关键字“class”
如:

class KotlinTest{}



2.2.类的构造函数:主构造函数以及辅助构造函数
Kotlin可以有一个主构造函数和多个辅助构造函数

  • 主构造函数:
constructor(id:String)
  • 辅助构造函数:
constructor(id: String,ids:String) : this(id) {}
  • 主构造函数与辅助构造函数的关系:如果类具有主构造函数,则每个辅助构造函数需要通过另一个辅助构造函数直接或间接地委派给主构造函数。 使用this关键字对同一类的另一个构造函数进行委派:
class KotlinTest constructor(id:String){    constructor(id: String,ids:String) : this(id) {    }    constructor(id: String,ids:String,idss: String) : this(id) {    }}



2.3.类的实例化

  • Kotlin与java中有所差别
//kotlinval kotlin = KotlinTest()
//javaKotlinTest java = new KotlinTest()



2.4.kotlin类的继承与依赖

  • Kotlin默认为final类型,不可被继承,需要在class关键字前面加上open关键字,才可以对外开放
//父类open class KotlinTest{}*****************//子类class KotlinTest2: KotlinTest() {}



2.5.kotlin类继承一个父类多个接口的写法:在文件名后加冒号:代表接下来它会继承父类和接口的实现
,如果需要实现更多接口只需要在,后面增加。

class KotlinTest2: KotlinTest(),KotlinInterface {    override fun interFace() {    }}





二、kotlin方法的变量、常量

  • 可变变量(var):来源于(variable)在Kotlin中var定义的参数在该类中属于可以被多次修改,对应Java中的变量
    如:
//var标注的参数是可以被修改的var name = "Android-var"private fun method() {     name = "Android-var2" }
//kotlin的var参数转译为Java后@NotNullprivate String name1 = "Android-var";
  • 不可变变量(val):来源于(value),只可以进行一次初始化,不可二次赋值,对应Java中的final变量
val name = "Android-val"val a: Int = 1val b = 1       // 系统自动推断变量类型为Intprivate fun method(){val c: Int      // 如果不在声明时初始化则必须提供变量类型c = 1           // 明确赋值//如果第二次赋值给他会出现:Val cannot be reassigned
//kotlin的val参数转译为Java后@NotNullprivate final String name = "Android-val";
//验证val中的kotlin参数是否可以获取多个值 private val msg:String get() {       for (i in 1..3){           return "as"+i       }       return "as"   }@Testfun testValmsg(){   println(this.msg)   println(this.msg)   println(this.msg)    }//输出结果:as1as1as1
  • 常量(const val)等同于Java中的public static final 定义的参数
    1.(const val)只能在Top-level(顶层声明),object和companion object的成员中声明,如:
const val name = "name" //Top-level 顶层声明object Singleton {    const val name= "name" //在object的成员中声明    val valStr = "valStr"}class MyClass {    companion object {        const val name= "name" //在companion object中声明    }}

2.不能自定义get()
3.常量(const val)与不可变变量(val)的区别

class KotlinTest {//kotlin中通过val、const val定义的数据    val name = "Android"    companion object{        const val name1 = "Android-object-const"        val name2 = "Android-object"    }}
//通过转译为java后@NotNullprivate final String name = "Android";@NotNullpublic static final String name1 = "Android-object-const";@NotNullprivate static final String name2 = "Android-object";
通过以上对比可以很方便的看出,在class文件中val 指代的是final类型参数,而在companion object中的val是private static final 类型参数,而const val 是public static final类型参数

这篇文章就讲到这里了,主要讲的是kotlin的基本使用适合准备开始学kotlin,或是对kotlin了解不深的朋友。kotlin还有很多有意思的地方,比如:扩展函数,协程,lambda等。

更多相关文章

  1. Android(安卓)SurfaceFlinger 学习之路(二)----SurfaceFlinger概
  2. android 浏览器插件开发 - 插件库
  3. monkey基础学习
  4. Android(安卓)activity 转场动画ActivityOptions
  5. Android(安卓)数据存储(二) 共享参数存储
  6. Android(安卓)实现通知栏显示多个notification
  7. android Bundle saveInsanceState
  8. Android(安卓)SQLite总结(一)
  9. Android(安卓)recovery 原理分析

随机推荐

  1. BroadcastReceiver之实现锁屏、解锁例子
  2. 使用android SharedPreference判断程序是
  3. android broastcast详解
  4. Android(安卓)背景图片重复 Background r
  5. 反射类查看类下面的所有方法及变量
  6. [置顶] Android之Fragment的前世今生(二)
  7. Android获取视频文件某一帧并设置图片
  8. android中usb设备驱动不能自动创建设备节
  9. android_8.1 hdmi设备热插拔事件
  10. Android培训班(72)Dex文件里类定义dvmDef