Kotlin精讲-黑马程序员(原创)禅与计算机程序设计艺术Kotlin

kotlin精讲-第3章(3)主构_次构_初始化方法

2017-12-04  本文已影响272人  739c8d412b4c

主构函数

我们知道Java在类定义的时候,可以定义构造方法,构造方法函数可以在类被创建的时候,接收外界传入的一些值。

Kotlin在类定义的时候,在类名后面加上小括号,变成了函数形式。我们在小括号内就可以直接定义类创建的时候可以接收的值,并可以把接收的值赋值给变量,达到Java里面构造函数的作用,我们称这样的函数为主构函数。参考案例:

针对以上代码我们定义了的Person类带主构喊,在创建Person对象的时候,可以传入一个String类型的name和一个Int类型的age,并把传入的值赋值给了变量。就这点而言,比Java单独定义一个构造函数还是要简便一些。

更进一步,在主构函数上,我们还可以为每一个变量加上一个val或者var修饰符,这样就表示,为该类定义了一个对应的成员属性,这样就免去了在类里面定义成员属性的麻烦,参考代码:

通过这样的方式,Kotlin定义类就比Java简洁一些了。我们还可以为主构函数中的每个成员属性定义一个默认值。这样在创建对象的时候既可以使用有参函数也可以调用无参函数。参考案例:

针对以上代码我们看到,主构函数的参数如果带默认参数之后,我们在调用主构函数的时候,配合命名参数,创建对象的时候,则可以有多种多样的形式,在Java里面可能需要多个构造方法才能满足。

次构函数

Kotlin的主构函数确实给我们带来了很多的方便,在编程开发过程中,能用主构函数,我们优先去用主构函数。其实Kotlin同样允许你像Java一样在类的内部定义构造函数,我们称这样的构造函数为次构函数。

使用次构函数的时候,分两种情况,一种是类不存在主构函数,一种是类存在主构函数。

我们先看类不存在主构函数的情况,我们把Person类修改为通过次构函数创建的情况,参考代码:

针对以上代码看上去是不是很熟悉,和我们Java的构造函数很类似。而且次构函数在写的时候,也不用完成自己去敲,IDEA给我们提供了快捷的创建,在类里面右键点击Generate,参考截图:

当然,也可以直接用Generate操作的快捷键Alt+Insert。

我们再看类存在主构函数的情况,如果类存在主构函数,次构函数需要对主构函数里面成员属性的值赋值,参考代码:

针对以上代码的第4行,就是次构函数。因为存在主构函数,所以我们通过“:this(name)”对主构函数成员变量进行了赋值。

注意次构函数不能像主构函数那样,通过加上var或者val修饰符,让方法参数变成类的成员属性,次构函数只能接收值,参考截图:

初始化方法

Java的类里面可以包含静态初始化快、实例初始化快。Kotlin为类提供了初始化方法。可以利用完成一些初始化操作,针对初始化方法,我们重点需要知道他的执行时机,通过案例,我们演示下,初始化方法的执行时机,参考案例:

针对以上代码我们看到两点。第一,调用了主构函数或者次构函数,都会触发初始化方法。第二,初始化方法在次构函数之前被执行。

上一篇下一篇

猜你喜欢

热点阅读