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 ...
随机推荐
- [LeetCode] 313. Super Ugly Number 超级丑陋数
Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whose all ...
- IEDA中使用阿里插件Alibaba Cloud Toolkit和Arthas(阿尔萨斯)
在 IntelliJ IDEA 中安装和配置 Cloud Toolkit 在 IntelliJ IDEA 中安装和配置 Cloud Toolkit 后,您可以将本地应用快速部署到阿里云 ECS.EDA ...
- Docker虚拟化
1. Docker虚拟化特点 跟传统VM比较具有如下优点: 操作启动快 运行时的性能可以获取极大提升,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的. 轻量级虚拟化 你会拥有足够的“操 ...
- Unity的学习笔记(向量点乘和叉乘)
public class AngleTest : MonoBehaviour { public GameObject cube; //主要的物体 public GameObject radCube; ...
- 兴奋与沮丧并存spider爬取拉勾网
兴奋的开发除了爬取拉勾网的爬虫信息,可是当调试都成功了的那一刻,我被拉钩封IP了. 下面是spider的主要内容 import reimport scrapy from bs4 import Beau ...
- idea全局护眼色绿豆沙
1.settings->plugins->BackgroundImage 2.在导航栏选择Help->FindAction 3.set background image 4.选择图片 ...
- javascript高级程序设计阅读总结
5章 引用类型 1.object类型 创建 1.var obj ={} ---对象字面量 2.var obj = new Object(); ---new操作符 2.Array类型 创建 1.var ...
- Oracle 创建与管理用户
标识用户是 Oracle 数据库管理的基本要求之一,每一个能够连接到数据库的用户都必须是系统的合法用户.用户想要使用 Oracle 的系统资源,就必须拥有相应的权限. 一.身份验证 Oracle 为用 ...
- fastjson源码分析之序列化
fastJson是很常用的序列化工具,用了这么久一直想底层看一下它的设计,探究一下它序列化和反序列化效率高的秘密.现在从最基础的用法开始,一点点揭开fastJson神秘的面纱.(版本:1.2.50) ...
- android 子线程使用handle修改主线线程内容
1.子线程使用handle修改主线线程内容简单案例 1).activity_handle.xml <?xml version="1.0" encoding="utf ...