【第四阶段】kotlin语言的构造函数学习

news2025/1/11 21:02:34

1.主构造函数

package Kotlin.Stage4
//主构造函数,规范来说,都是增加_xxx的形式,临时的输入类型,不能直接用。需要接收下来,成为变量才能用。
class TestBase(_name:String,_sex:Char,_age:Int,_info:String){   //主构造函数
      var name=_name
      get() = field //get不允许私有化
      private set(value) {  //私有化的set在调用时 不能访问,无法set
          field=value
      }

    val sex=_sex
    get() = field
    //set(value){}  由于是只读val的 因此无法使用set函数

    var age=_age
    get() = field +1

    var info=_info
    get() = "【$field】"

    fun show(){
        //println(_name) _name临时输入类型 不能直接用,需要接收才能用
        println(name)
        println(sex)
        println(age)
        println(info)
    }
}

fun main() {
    //创建对象
    var p=TestBase(_name = "kotlin",_age = 20,_sex = '男',_info = "我是语言")
    p.show()
}

执行结果
在这里插入图片描述
类似java中的this.nam=name
2.主构造函数里面定义属性
优化上述构造,一步到位

package Kotlin.Stage4

class TestBase1(var name:String,val sex:Char,var age:Int, var info:String){   //主构造函数

    fun show(){
        println(name)
        println(sex)
        println(age)
        println(info)
    }
}

fun main() {
    //创建对象
    var p=TestBase1(name = "kotlin",age = 20,sex = '男',info = "我是语言")
    p.show()
}

执行结果
在这里插入图片描述
3.次构造函数

constructor()
package Kotlin.Stage4
class TestBase3(name:String){ //主构造
     //次构造函数必须调用主构造,否在会报错。主构造统一管理,为了更好的初始化
    //2个参数的次构造
    constructor(name: String,sex:Char):this(name){
         println("2个参数的次构造函数:name=$name,sex=$sex")
     }
    constructor(name: String,sex: Char,age:Int):this(name){
        println("3个参数的次构造函数:name=$name,sex=$sex,age=$age")
    }
    constructor(name: String,sex: Char,age:Int,info:String):this(name){
        println("3个参数的次构造函数:name=$name,sex=$sex,age=$age,info=$info")
    }
}

fun main() {
    //调用主构造
    TestBase3("java")
    //调用次构造
    TestBase3("kotlin",'m')
    TestBase3("kotlin",'m',25)
    TestBase3("kotlin",'m',25,"我是语言")

}

执行结果
在这里插入图片描述
4.构造函数默认参数
如果用户不传入参数,可以直接使用默认值

package Kotlin.Stage4

class TestBase4(name:String="java"){ //主构造
    //次构造函数必须调用主构造,否在会报错。主构造统一管理,为了更好的初始化
    //2个参数的次构造
    constructor(name: String="kotlin",sex:Char='w'):this(name){
        println("2个参数的次构造函数:name=$name,sex=$sex")
    }
    constructor(name: String="c",sex: Char='m',age:Int=25):this(name){
        println("3个参数的次构造函数:name=$name,sex=$sex,age=$age")
    }
    constructor(name: String="c++",sex: Char='m',age:Int=35,info:String="我是语言"):this(name){
        println("3个参数的次构造函数:name=$name,sex=$sex,age=$age,info=$info")
    }
    fun show(){
        println("主构造函数调用结果")
    }
}

fun main() {
    //调用主构造
    TestBase4("java")
    //调用次构造
    TestBase4("kotlin",'m')
    TestBase4("kotlin",'m',25)
    TestBase4("kotlin",'m',25,"我是语言")
    //上述传入参数会覆盖默认参数
    
    TestBase4().show() //此种情况下会优先调用主构造
}

执行结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浮点数运算精度的问题

每日鸡汤:每个你想要学习的瞬间都是未来的你像自己求救 经典面试题,浮点数运算精度的问题,以前一直没有遇到过,今天可算是遇到了,问题是这样的 有一个需求就是一个商品价值164元,然后有一个8折的优惠券&…

想要成为一名优秀的测试工程师,必须要遵守这8个测试原则

测试原则是一个测试人员时刻要铭记在心的,甚至要形成一种本能,指导测试工作。 原则1:测试找不出所有的Bug 软件的复杂性仅次于生命体,甚至现在很多软件都已经有了人工智能的属性。对于这样精妙的系统,一小点异常都有可…

CRM和数字营销什么关系?

crm系统是客户管理系统,主要是用来维护和管理客户关系;数字营销是一种营销策略,用来推广产品和服务。 接下来,将为大家带来crm系统和数字营销关系的深度解析,全文干货! 一、crm是什么? crm系…

c++中关于Thread Affinity(线程亲和性)示例源码

win10下,可以在任务管理器里面设置某个进程的线程亲和性,如下图: 然后选择相关的cpu,如下图: 这么做可以使得相关的线程在某些密集型计算任务中只会运行在某些指定的cpu上,以便提高性能。 以下是windwos上c程序中应用Thread Affi…

接口自动化测试框架postman tests常用方法

postman常用方法集合: 1.设置环境变量 postman.setEnvironmentVariable("key", "value"); pm.environment.set("key", "value");//postman 5.0以上版本设置环境变量的方法 2.设置全局变量 postman.setGlobalVariable(&…

numpy 和 tensorflow 中的各种乘法(点乘和矩阵乘)

嗨喽,大家好呀~这里是爱看美女的茜茜呐 👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了,直接在文末名片自取就可 点乘和矩阵乘…

JavaScript中的基础知识挑战

让我们进一步改进史蒂文的小费计算器,这次使用的是循环! 创建一个包含所有10个测试账单值的数组 “账单”。为小费和总数创建空数组(‘小费’和’总数’)。使用我们之前写的’calcTip’函数(不需要重复)来…

企业内部安全与风控管理图解

企业内部安全说外部安全,企业领导者都非常关注,由于各方面原因,。。。力不从心,妥协! 方向: 1、制度 结合企业实情,编制企业安全管理制度 2、硬件 处理常规硬件外观,加壳与锁定、…

Mybatis工作流程及原理详解

一、概述 1.何为mybatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 J…

计算存储是不是智算时代的杀手锏?

想象一下,在一个繁忙的数据中心里,有一家大型互联网公司叫做“数据中心的故事”。这家公司一直在使用传统的CPU架构来处理海量数据。但是随着数据量的不断增长,CPU架构遇到了很多问题和瓶颈,这让“数据中心的故事”感到非常苦恼。…

第一章:最新版零基础学习 PYTHON 教程(第四节 - Python 3 基础知识)

Python 3 是一种流行的高级编程语言,用于各种应用程序。以下是您应该了解的一些 Python 3 基础知识: 变量:在 Python 3 中,变量是通过将值分配给名称来创建的。例如,x 5 创建一个名为 x 的变量,并为其分配…

数据包络分析——SBM模型

写在前面: 博主本人大学期间参加数学建模竞赛十多余次,获奖等级均在二等奖以上。为了让更多学生在数学建模这条路上少走弯路,故将数学建模常用数学模型算法汇聚于此专栏,希望能够对要参加数学建模比赛的同学们有所帮助。 目录 1. …

康耐德视觉检测系统可以在元器件生产中发挥什么作用?

电子元器件作为电子信息产业链的上游产品,是开发通信、计算机及网络、数字音视频等系统和终端产品的基础,电子元部件工作是否可靠决定了电子设备运行是否正常。电子元器件的外观缺陷检测是一个非常关键的部分,因为这类产品一般都比较小。质量…

MyBatis 工具学习笔记(基础)

Whats this 是一款优秀的持久层框架,用于简化 JDBC 开发是 Apache 的一个开源项目 Java EE 三层架构:表现层、业务层、持久层(存储层) (持久层:负责将数据保存到数据库的那一层代码) ORM&…

BUUCTF:[MRCTF2020]套娃

查看源码发现 PHP非法参数名传参问题,详细请参考我的这篇文章:谈一谈PHP中关于非法参数名传参问题 正则这里绕过使用%0a换行符绕过,payload: /?b.u.p.t23333%0a 得到下一步信息:secrettw.php 注释中的是JsFuck,用这…

Lostash同步Mysql数据到ElasticSearch(二)logstash脚本配置和常见坑点

1. logstash脚本编写(采用单文件对应单表实例) 新建脚本文件夹 cd /usr/local/logstash mkdir sql & cd sql vim 表名称.conf #如: znyw_data_gkb_logstash.conf 建立文件夹,保存资源文件更新Id mkdir -p /data/logstash/data/last_r…

VBA技术资料MF58:VBA_测试点是否在多边形中

【分享成果,随喜正能量】人一辈子,只能靠长期去做某件事情来成就自己,而不是靠某一个人来成就自己。关于这点,你要么及早领悟,要么等待时光给出教训,逼你领悟。 我给VBA的定义:VBA是个人小型自…

数据结构 第一章作业 绪论 西安石油大学

绪论第1章 1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 答案: 数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计…

【C++面向对象侯捷】大师写法,证明你学过!一出手就是正规军~

文章目录 1.Header(头文件)中防卫式声明!2. 构造函数赋值3. const member functions(常量成员函数) > 不会改变数据内容的,加上const4. 参数 和 返回值尽量传 引用,减少 数据 传输5. 设计一个类,特别注意…

从功能测试到自动化测试你都知道他们的有缺点吗?

一、手工测试优点 测试人员的经验可以继承,对错误有猜测能力 测试人员有审美能力和心理体验 测试人员有逻辑推断能力 二、自动化的优点 自动化测试执行可以替代大量的手工机械重复性操作,测试工程师可以把更多的时间花在更全面的用例设计和新功能的测试上…