Kotlin构造方法详解与初始化过程分析
在上一次https://www.cnblogs.com/webor2006/p/11192025.html已经初识了Kolin的面向对象,先来回顾一下:

介绍了primary 构造方法,其特点回忆一下:

其中一个类中还有可能有多个sdcondary构造方法,所以接下来会来学习它,先定义一个带一个参数的primary构造方法:

然后给类中定义三个成员变量,先来定义一个:

这跟Java是完全不一样的,解决办法之一是将其定义成abstract的,但是关于abstract的定义之后再系统学习,所以目前咱们只能对这个变量进行初始化一下下了,这里可以放到init块中,如下:

其实我们可以发现:

接着再定义两个成员属性,如下:

接下来则来学习一下secondary构造方法的定义,它是定义在类体当中的,下面来定义一个:

言外之意就是说在我们定义secondary构造方法时,一定是要直接或者间接去调用primary构造方法的,所以:


这样第一个secondary构造方法就定义好了,可以发现构造方法是没有名字的,这也是跟Java的一个不同点。接着再定义第二个secondary构造方法,如下:

接下来则定义一个打印方法,然后调用看一下:

针对这个程序再来多说几点:
1、如果对于一个类未定义任何构造方法,则默认会生成一个primary构造方法。
2、如果没有给构造方法加访问修饰符【未来会详细学习它的】,默认是public级别的,这个跟Java是不一样的。所以如果想私有构造则需:

接下来Kotlin其实还有更加简便的方式能够在构造时就能够对类的属性进行赋值,也是跟Java完全不一样的,具体看一下如何写:

其中private是可以去掉的:

IDE会提示:

还是将其还原成private,下面来调用一下:

另外对于之前primary构造方法的定义规则:

下面用代码来验证一下:

变成:

但是,如果加了访问修饰符:

将constructor给去掉,会立马报错:

另外构造参数可以定义默认参数,类似c++,如下:


下面来使用一下:

同时创建时也继续可以传递新参数,如下:

另外还有点需要明白:“在JVM上,如果类的primary构造方法的所有参数都拥有默认值,那么Kotlin编译器就会为这个类生成一个不带参数的构造方法。这个不带参数的构造方法会使用这些参数的默认值,这样做的目的在于可以跟Spring等框架更好地集成。”
Kotlin构造方法详解与初始化过程分析的更多相关文章
- String类的构造方法详解
package StringDemo; //String类的构造方法详解 //方法一:String(); //方法二:String(byte[] bytes) //方法三:String (byte[] ...
- “全栈2019”Java第五十七章:多态与构造方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第五十章:继承与构造方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Kotlin——最详解的类(class)的使用
在任何一门面向对象编程的语言里,类(class)是非常基础.但也是非常重要的一项组成,通俗的说就是万般皆对象,而所说的对象就是我们生成的类.Kotlin也是如此,下面详细为大家介绍Kotlin中的类的 ...
- java 构造方法详解
构造方法(构造器) 是一种特殊的方法,该方法只有功能:构造对象 特点: 1.没有返回值 2.构造方法的名称一定和类名一致 3.不能在构造方法中写r ...
- java基础:详解类和对象,类和对象的应用,封装思想,构造方法详解,附练习案列
1. 类和对象 面向对象和面向过程的思想对比 : 面向过程 :是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的 面向对象 :是一种以对象为中心的编程思想,通过指挥对象实现具体的功能 1. ...
- java中的静态变量、静态方法与静态代码块详解与初始化顺序
我们知道类的生命周期分为装载.连接.初始化.使用和卸载的五个过程.其中静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...
- UVA10870 Recurrences (矩阵快速幂及构造方法详解)
题意: F(n) = a1 * F(n-1) + a2 * F(n-2)+ ···· + ad * F(n-d). 求给你的n . 很明显这是一道矩阵快速幂的题目. 题解: [Fn-1, Fn-2, ...
- WinDBG详解进程初始化dll是如何加载的
一:背景 1.讲故事 有朋友咨询个问题,他每次在调试 WinDbg 的时候,进程初始化断点之前都会有一些 dll 加载到进程中,比如下面这样: Microsoft (R) Windows Debugg ...
随机推荐
- layui父页面执行子页面方法
parent.window[layero.find('iframe')[0]['name']].子页面方法(); layero.find('iframe')[0].contentWindow.子页面方 ...
- Hack The Box Web Pentest 2017
[20 Points] Lernaean [by [Arrexel] 问题描述: Your target is not very good with computers. Try and guess ...
- 使用SnowFlake算法生成唯一ID
转自:https://segmentfault.com/a/1190000007769660 考虑过的方法有 直接用时间戳,或者以此衍生的一系列方法 Mysql自带的uuid 以上两种方法都可以查到就 ...
- 在iis中部署网站出现的错误
第一次错误: 解决的方案:点击网站新建一个同名的应用池,选择网站的基本设置,选中同名的应用池 接下来可能会有第二个错误 错误摘要HTTP 错误 500.21 - Internal Server Err ...
- NLP自然语言处理的开发环境搭建
NLP的开发环境搭建主要分为以下几步: Python安装 NLTK系统安装 Python3.5下载安装 下载链接:https://www.python.org/downloads/release/py ...
- 设置session销毁时间
currentUser.getSession().setTimeout();
- nginx反向代理的一次实践
场景:前端(VUE.js)应用部署在linux服务器,需要支持http和https访问. 问题1:阿里服务器不支持域名访问? 通过域名绑定服务器解决 问题2:如何通过http访问前端 前端通过ngin ...
- backpropagation algorithm
搞卷积神经网络的时候突然发现自己不清楚神经网络怎么训练了,满脸黑线,借此机会复习一下把. 首先放一位知乎大佬的解释.https://www.zhihu.com/question/27239198?rf ...
- 转:JVM的符号引用和直接引用
在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用. 1.符号引用(Symbolic References): 符号引用以一组符号来描述所引用的目标,符号可 ...
- Java中 StringBuffer StringBuilder String 区别
String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBui ...