类 kotlin(13)
Kotlin 中使用关键字 class 声明类
class Invoice {
} 类声明由类名、类头(指定其类型参数、主 构造函数等) 和由大括号包围的类体构成。类头
和类体都是可选的;
如果一个类没有类体,可以省略花括号。
class MyClass 构造函数
在 Kotlin 中的一个类可以有一个主构造函数和一个或多个次构造函数。主 构造函数是类头的
一部分:它跟在类名(和可选的类型参数) 后。

关键字class +类名+构造函数关键字constructor+(参数)
如果主构造函数没有任何注解或者可见性修饰符,可以省略这个 constructor 关键字。
class Person(firstName: String) {
} 主构造函数不能包含任何的代码。
初始化的代码可以放 到以 init 关键字作为前缀的初始化块(initializer blocks) 中:
class Customer(name: String) {
init {
logger.info("Customer initialized with value ${name}")
}
}
事实上,声明属性以及从主构造函数初始化属性,Kotlin 有简洁的语法:
class Person(val firstName: String, val lastName: String, var age: Int) {
// ……
}
没看明白,在构造方法声明的参数,属于类属性吗??????????????
构造方法的参数声明中 val 可以省略,如果不写默认val ;

证明上面的理解是对的。构造方法的参数就是类的属性。val声明就是不可变,var是可变。很奇葩!
与普通属性一样,主构造函数中声明的属性可以是 可变的(var ) 或只读的(val ) 。
如果构造函数有注解或可见性修饰符,这个 constructor 关键字是必需的,并且 这些修饰符
在它前面:
class Customer public @Inject constructor(name: String) {
……
}
次构造函数
类也可以声明前缀有 constructor 的次构造函数:
class Person {
constructor(parent: Person) {
parent.children.add(this)
}
}
如果类有一个主构造函数,每个次构造函数需要委托给主构造函数, 可以直接委托或者通过
别的次构造函数间接委托。委托到同一个类的另一个构造函数 用 this 关键字即可:
class Person(val name: String) {
constructor(name: String, parent: Person) : this(name) {
parent.children.add(this)
}
}
如果一个非抽象类没有声明任何(主或次) 构造函数,它会有一个生成的 不带参数的主构造
函数。构造函数的可见性是 public。如果你不希望你的类 有一个公有构造函数,你需要声明
一个带有非默认可见性的空的主构造函数:
类和继承
class DontCreateMe private constructor () {
}
注意:在 JVM 上,如果主构造函数的所有的参数都有默认值,编译器会生成 一个额外
的无参构造函数,它将使用默认值。这使得 Kotlin 更易于使用像 Jackson 或者 JPA 这样
的通过无参构造函数创建类的实例的库。
class Customer(val customerName: String = "")
{:.info}
创建类的实例
要创建一个类的实例,我们就像普通函数一样调用构造函数:
val invoice = Invoice()
val customer = Customer("Joe Smith")
注意 Kotlin 并没有 new 关键字。
创建嵌套类、内部类和匿名内部类的类实例在嵌套类中有述。
类成员
类可以包含
构造函数和初始化块
函数
属性
嵌套类和内部类
对象声明
类 kotlin(13)的更多相关文章
- python __builtins__ complex类 (13)
13.'complex', 函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数.如果第一个参数为字符串,则不需要指定第二个参数. class complex(ob ...
- MOOC(7)- case依赖、读取json配置文件进行多个接口请求-读取json封装成类(13)
把读取json数据的函数封装成类 # -*- coding: utf-8 -*- # @Time : 2020/2/12 16:44 # @File : do_json_13.py # @Author ...
- Kotlin学习笔记(9)- 数据类
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...
- Kotlin 数据类与密封类
数据类 Kotlin 可以创建一个只包含数据的类,关键字为 data: data class User(val name: String, val age: Int) 编译器会自动的从主构造函数中根据 ...
- 《python解释器源码剖析》第13章--python虚拟机中的类机制
13.0 序 这一章我们就来看看python中类是怎么实现的,我们知道C不是一个面向对象语言,而python却是一个面向对象的语言,那么在python的底层,是如何使用C来支持python实现面向对象 ...
- 用kotlin方式打开《第一行代码:Android》之开发酷欧天气(1)
参考:<第一行代码:Android>第2版--郭霖 注1:本文为原创,例子可参考郭前辈著作:<第一行代码:Android>第2版 注2:本文不赘述android开发的基本理论, ...
- 【Try Kotlin】Kotlin Koans 代码笔记
Kotlin Koans 心印 Introduction 1.Hello, world! Simple Functions Take a look at function syntax and mak ...
- kotlin官方文档-1.0入门
什么是Kotlin? 图片发自简书App Kotlin是JetBrains开发的基于JVM的语言,JetBrains想必大家应该很熟悉了,他们创造了很多强大的IDE,android studio谷 ...
- Kotlin学习笔记
Kotlin的注释 Kotlin 的代码注释和Java一模一样 Kotlin的运行方式也是先kotlinc生成字节码,再kotlin字节码 如果一行里面只有一条语句,那么可以不写分号.但如果打算在同一 ...
随机推荐
- Redis-String常用命令
Redis-String常用命令 set key value- 设置Key-value键值对 get key 获取指定key对应的值 append key value 在指定key对应值的后面追加va ...
- SVN主从备份
SVN主从备份 两套环境:192.168.67.63(主SVN) 192.168.67.60(从SVN) 1.主环境上已经装好SVN并且存在数据仓库/home/svndata在从环境上,新建一/hom ...
- 中断或取消Promise链的可行方案
ES6标准引入的异步编程解决方案Promise,能够将层层嵌套的回调转化成扁平的Promise链式调用,优雅地解决了“回调地狱”的问题.当Promise链中抛出一个错误时,错误信息沿着链路向后传递,直 ...
- Delphi MSComm控件事件的介绍
- 【异常】lockfile.AlreadyLocked: ~/airflow/airflow-scheduler.pid is already locked
1 完整异常信息 File "/usr/bin/airflow", line 32, in <module> args.func(args) File "/u ...
- 工控漏洞利用框架 - ISF(Industrial Security Framework)
一. 框架介绍 本框架主要使用Python语言开发,通过集成ShadowBroker释放的NSA工具Fuzzbunch攻击框架,开发一款适合工控漏洞利用的框架.由于Fuzzbunch攻击框架仅适用于P ...
- Python lambda 知识点
作者说学会了lambda后,你会用上瘾的,因为让代码复用和简洁. 初识lamdba不太好理解,尤其是它能当着一个变量传递给函数,不过多学着写几个例子就好了,下面是我的学习笔记. lambda 操作符( ...
- 8.8.ZooKeeper 原理和选举机制
1.ZooKeeper原理 Zookeeper虽然在配置文件中并没有指定master和slave但是,zookeeper工作时,是有一个节点为leader,其他则为follower,Leader是通 ...
- 【NOIP2012】同余方程
原题: 求关于xx的同余方程ax≡1(mod b)的最小正整数解. 裸题 当年被这题劝退,现在老子终于学会exgcd了哈哈哈哈哈哈哈哈 ax≡1(mod b) => ax=1+by => ...
- golang 数组之间的交集,差集,并集,补集
今天公司需求两个数组之间的差集,类库下不下来,就独立出来了一份,希望读者有用 package model import ( "sort" "sync" ) ty ...
