Kotlin学习——hello kotlin 函数function 变量 类 + 泛型 + 继承

news2024/9/21 22:53:03

在这里插入图片描述

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。

https://play.kotlinlang.org/byExample/01_introduction/02_Functions

目录

  • 引出
  • hello
  • function函数
    • Infix Functions 中缀函数
    • Operator Functions 算术函数
    • 变长参数vararg Parameters
  • 变量
    • kt中的null
  • kt中的类
  • 泛型 Generics
    • 泛型函数Generic Functions
  • 继承Inheritance
    • 超类Asiatic
  • 总结

引出


1.kotlin初识;
2.function函数,变量,null;
3.泛型,接口,继承,超类;

hello

在这里插入图片描述

package com.tianju.ktLearn


fun main() {                        // 2
    println("Hello, World!")        // 3
}

function函数

  • 返回值为Unit,表示没有返回值, 类似与java里面的 void
  • Unit可以省略不写,可以传两个参数,参数带有默认值

在这里插入图片描述

package com.tianju.ktLearn

// 返回值为Unit,表示没有返回值, 类似与java里面的 void
fun printMsg(msg: String): Unit {
    println(msg)
}

// Unit可以省略不写,可以传两个参数,参数带有默认值
fun printMsgWithPrefix(msg: String, prefix:String = "info") {
    println("[wtt--$prefix] $msg")
}

fun sum(x: Int, y: Int): Int {
    return x+y;
}

fun multiply(x: Int,y: Int) = x*y

fun main() {
    printMsg("Pet!")
    // 可以不传参,带有默认参数的
    printMsgWithPrefix("Hello")
    printMsgWithPrefix("Hello","Peter")
    printMsgWithPrefix(prefix = "MMDD", msg = "HTTP")
    val sum = sum(100, 300)
    println(sum)
    println(multiply(3,30))
}

Infix Functions 中缀函数

具有单个参数的成员函数和扩展可以转换为中缀函数。

在这里插入图片描述

package com.tianju.ktLearn;

// 具有单个参数的成员函数和扩展可以转换为中缀函数
fun main(){
        infix fun Int.times(str: String) = str.repeat(this)
        println(2 times "Hei!")


        // to 是标准库中的函数 kotlin.Pair<A, B>
        val  pair = "WHTT" to "PPTS"
        println(pair)

        // 自定义一个 onto 函数
        infix fun String.onto(str: String) = Pair(this,str)
        val myPair = "MVC" onto "WWW"
        println(myPair)

        val pet = Person("peter",34)
        val Shi = Person("Shirley",30)
        pet likes Shi
        println(pet.people[0])
}

class Person(val name: String,val year: Int){

        val people = mutableListOf<Person>()
        infix fun likes(person: Person){
                people.add(person)
        }

}

Operator Functions 算术函数

Certain functions can be “upgraded” to operators, allowing their calls with the corresponding operator symbol.

在这里插入图片描述

package com.tianju.ktLearn

// 符号times 就是 下面的 乘号 *
operator fun Int.times(str:String) = str.repeat(this)

fun main() {
    println(2 * "Bye")
    val str = "Always forgive your enemies; nothing annoys them so much."
    operator fun String.get(range: IntRange) = substring(range)
    println(str[0..14])
}

变长参数vararg Parameters

在这里插入图片描述

package com.tianju.ktLearn

fun printAll(vararg msgs: String) {
    for (msg in msgs){
        println(msg)
    }
}

fun printWithPre(vararg msgs: String, prefix:String): Unit {
    for (msg in msgs) println("[嘻嘻嘻--$prefix]$msg")
}

fun logs(vararg msgs:String){
    printAll(*msgs)
}

fun main() {
    printAll("pet","sh","wt")
    printWithPre("pet","sh","wt", prefix ="Hi")
    logs("sh","wtt","abc")

}

变量

Kotlin具有强大的类型推理能力。虽然你可以显式地声明变量的类型,但你通常会让编译器通过推断来完成这项工作。Kotlin不强制执行不变性,但建议这样做。本质上使用val而不是var。

val b: Int = 1             // 2
val c = 3                  // 3

声明一个不可变变量并对其进行初始化。

声明一个不可变变量并在不指定类型的情况下对其进行初始化。编译器推断类型Int。

kt中的null

  • 在kt里面,如果有一个可以为null,需要在类型后面加上 问号 ?
  • 函数只能传入不为null的值
  • 参数类型后面加个 ? 问号后,传入的值可以为null

在这里插入图片描述

在这里插入图片描述

package com.tianju.ktLearn


fun main() {
    var neverNull : String = "never Null"
    // neverNull = null
    println(neverNull)

    // 在kt里面,如果有一个可以为null,需要在类型后面加上 问号 ?
    var nullable:String? = "can be null"
    nullable = null
    println(nullable)
    fun strLength(notNull:String ): Int {
        return notNull.length
    }

    // 函数只能传入不为null的值
    strLength(neverNull)
//    strLength(nullable) // 爆红

    val str = descStr(null)
    println(str)

    println(descStr("hello are you ok?"))
}

/**
 * 返回值为String,
 * 参数类型后面加个 ? 问号后,传入的值可以为null
 */
fun descStr(maybeStr: String?): String {
    if (maybeStr !=null && maybeStr.length>0){
        return "StrLength is ${maybeStr.length}"
    }
    return "null"
}

kt中的类

  • 在kt里面没有 new 关键字

在这里插入图片描述

泛型 Generics

在这里插入图片描述

package com.tianju.ktLearn

/**
 * 可以输入多个参数 vararg
 * <E> 泛型
 */
class MutableStack<E>(vararg items: E) {              // 1

    private val elements = items.toMutableList()

    fun push(element: E) = elements.add(element)        // 2

    // 偷看一下
    fun peek(): E = elements.last()                     // 3

    // 弹出栈顶元素
    fun pop(): E = elements.removeAt(elements.size - 1)

    fun isEmpty() = elements.isEmpty()

    fun size() = elements.size

    override fun toString() = "MutableStack(${elements.joinToString()})"
}

fun main() {
    val mut = MutableStack<String>("hello","pet")
    println("is mut empty?---> " + mut.isEmpty())
    print(mut)
    mut.push("wtt")
    println(mut)
    mut.peek()
    println(mut)
    val pop = mut.pop()
    println(pop)
    println(mut)
    println("is mut empty?---> " + mut.isEmpty())
}

在这里插入图片描述

泛型函数Generic Functions

如果函数的逻辑独立于特定类型,则也可以生成函数。例如,您可以编写一个实用程序函数来创建可变堆栈:

在这里插入图片描述

继承Inheritance

在这里插入图片描述

在这里插入图片描述

超类Asiatic

在这里插入图片描述

在这里插入图片描述

package com.tianju.ktLearn

/**
 * open 关键字就表示是接口 interface
 */
open class Dog{
    open fun fake(){
        println("wow wow !")
    }
}

class YourDog : Dog(){
    override fun fake() {
        println("miao wu ,wow")
    }
}

/**
 * 带参数的接口
 * interface with par
 */
open class Cat(val name: String){
    fun sayHello(){
        println("A cat name is [$name] say hello")
    }
}

class Arya : Cat("Arya")

/**
 * 超类 :将构造函数参数传递给超类
 */
open class Lion(val name:String,val age: Int){
    fun sayHello(){
        println("hi, every one, my name is $name, age is $age")
    }
}

/**
 * Asiatic声明中的name既不是var也不是val:它是一个构造函数参数
 */
class Asiatic(name: String) : Lion(name = name, age = 18)


fun main() {
    val dog = YourDog()
    dog.fake()

    val cat : Cat = Arya()
    cat.sayHello()
    println(cat.name)

    val lion: Lion = Asiatic("Peter")
    lion.sayHello()
}

总结

1.kotlin初识;
2.function函数,变量,null;
3.泛型,接口,继承,超类;

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

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

相关文章

5G与中国的海

今年国庆假期&#xff0c;香港迎来了阔别5年的国庆维港烟花汇演 10月1日晚上9点&#xff0c;“HKT x FWD 2023 年国庆烟花汇演”在维多利亚港上空上演。在23分钟时间里&#xff0c;燃放了超过3万枚烟花。而与以往维港烟花秀不同的是&#xff0c;为了让更多民众欣赏这次表演&…

【canvas】了解canvas,并实现会议预定记录钟表盘、页面水印

初识canvas Canvas 有什么用 Canvas 允许使用直线、曲线、矩形、圆形等基本图形绘制出复杂的图形 Canvas 可以加载图像&#xff0c;并进行各种处理&#xff0c;如裁剪、缩放、旋转等操作 Canvas 可以通过 JavaScript 控制&#xff0c;所以你可以利用帧动画原理&#xff0c;…

【C++】​——多态性与模板(其一)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

2023年中国稀土精密加工分类、市场规模及发展趋势分析[图]

稀土精密加工行业是指通过精密加工技术对稀土材料进行加工、制造和加工成品的一种行业。稀土精密加工行业主要包括稀土材料的提取、分离、纯化、加工和制造等环节&#xff0c;其中加工和制造是该行业的核心环节。稀土材料是指具有特殊物理、化学和磁性等性质的一类元素&#xf…

Oracle for Windows安装和配置——Oracle for Windows net配置

2.3. Oracle for Windows net配置 2.3.1. Oracle net配置 2.3.1.1. Oracle net简介 前述章节中,我们只是安装了数据库软件,创建了数据库,测试在服务器本地连接查询数据库。但还不能通过网络远程连接访问数据库,因为我们还没配置用来远程连接访问该数据库的组件Oracle ne…

数字IC前端学习笔记:时钟切换电路

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 有些时候我们需要在系统运行时切换系统时钟&#xff0c;最简单的方法就是使用一个MUX&#xff08;数据选择器&#xff09;选择输出的时钟&#xff0c;如下代码片所…

提取图像文本的 5 大 Python 库

引言 光学字符识别是一个古老但依然具有挑战性的问题&#xff0c;涉及从非结构化数据中&#xff08;包括图像和PDF文档&#xff09;检测和识别文本。它在银行、电子商务和社交媒体内容管理等领域具有广泛的应用。 但与数据科学中的每个主题一样&#xff0c;尝试学习如何解决OC…

YOLOv8改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了YOLOv8的重大改进&#xff0c;特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体&#xff0c;如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU&#xff0c;还融合了“Focus”思想&#xff0c;创造了一系列新的损失函数。这些组合形式的…

OpenAI 地震!首席执行官被解雇,背后的原因是?

11月17日&#xff0c;ChatGPT的制造商OpenAI表示&#xff0c;经过审查后发现联合创始人兼首席执行官 Sam Altman与董事会“沟通时并不一贯坦诚”&#xff0c;因此公司已经决定解雇他。这家人工智能&#xff08;AI&#xff09;公司在一份声明中表示&#xff1a;“董事会不再相信…

美团外卖9元每周星期一开工外卖红包优惠券怎么领取?

美团外卖9元周一开工红包活动时间是什么时候&#xff1f; 美团外卖9元周一开工红包优惠券是指每周星期一可以领取的美团外卖红包优惠券&#xff0c;在美团外卖周一开工红包领取活动时间内可领取到9元周一开工美团外卖红包优惠券&#xff1b;&#xff08;温馨提醒&#xff1a;如…

2023年中国全自动烘干机产业链、产能及发展趋势分析[图]

全自动烘干机设备是工业化生产制造过程中不可缺少的一种机械设备设备&#xff0c;它广泛应用于工业化工原料加工中药材烘干、农副产品加工等&#xff0c;因此制造了多种干燥设备&#xff0c;目前有多层网带干燥机、热泵干燥机、微波干燥机和冷冻干燥机四种自动干燥机&#xff0…

jetbrains ai 提示该地区不可用的百分百解决方案,亲测有效

问题 申请 jetbrains 的 ai assistant 白名单已经通过&#xff0c;但是在使用 ai assistant 的过程中提示 The usage of the service is not permitted in your location ,我所在的地区是中国&#xff0c;目前该插件是对中国大陆关闭的。 刚开始我怀疑是代理的问题&#xff…

ckplayer自己定义风格播放器的开发记录

CKplayer是一款基于Flash和HTML5技术的开源视频播放器&#xff0c;支持多种格式的音视频播放&#xff0c;并且具有优秀的兼容性和扩展性。 它不仅可以在网页上播放本地或者网络上的视频&#xff0c;还可以通过代码嵌入到网页中&#xff0c;实现更加个性化的播放效果。CKplayer…

【cpolar】搭建我的世界Java版服务器,公网远程联机

&#x1f3a5; 个人主页&#xff1a;深鱼~&#x1f525;收录专栏&#xff1a;cpolar&#x1f304;欢迎 &#x1f44d;点赞✍评论⭐收藏 目录 前言&#xff1a; 1. 搭建我的世界服务器 1.1 服务器安装java环境 1.2 配置服务端 2. 测试局域网联机 3. 公网远程联机 3.1 安…

【Java程序员面试专栏 专业技能篇】Java SE核心面试指引(一):基础知识考察

关于Java SE部分的核心知识进行一网打尽,包括四部分:基础知识考察、面向对象思想、核心机制策略、Java新特性,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第一部分:基础知识考察,子节点表示追问或同级提问 基本概念 …

数据仓库高级面试题

数仓高内聚低耦合是怎么做的 定义 高内聚&#xff1a;强调模块内部的相对独立性&#xff0c;要求模块内部的元素尽可能的完成一个功能&#xff0c;不混杂其他功能&#xff0c;从而使模块保持简洁&#xff0c;易于理解和管理。 低耦合&#xff1a;模块之间的耦合度要尽可能的…

壹基金为爱同行走进绿水青山,为乡村儿童送去健康水

壹基金为爱同行公益践行活动发起于2013年,截至2022年底,累计有63,319名线下参与队员,走过了8个城市。2023年,为爱同行的“壹家人”再次出发,走进“绿水青山就是金山银山”理念诞生地——浙江安吉余村,徒步18公里,为乡村儿童喝上足量、干净的饮用水筹集善款。本次活动获得了当地…

CorelDraw2024(CDR)- 矢量图制作软件介绍

在当今数字化时代&#xff0c;平面设计已成为营销、品牌推广和创意表达中不可或缺的元素。平面设计必备三大软件Adebo PhotoShop、CorelDraw、Adobe illustrator, 今天小编就详细介绍其中之一的CorelDraw软件。为什么这款软件在设计界赢得了声誉&#xff0c;并成为了设计师的无…

深度学习之基于YoloV5-Pose的人体姿态检测可视化系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 深度学习之基于 YOLOv5-Pose 的人体姿态检测可视化系统介绍YOLOv5-Pose 简介系统特点系统架构使用方法 二、功能三、系统四. 总结 一项目简介 深度学习之基…

大白话解释什么类加载机制

大家好&#xff0c;我是伍六七。 今天我们来聊聊一个 Java 面试必考基础题目&#xff1a;类加载机制和双亲委派机制。 Java 类的加载机制是 Java 虚拟机&#xff08;JVM&#xff09;中类加载&#xff08;Class Loading&#xff09;和链接&#xff08;Linking&#xff09;的过…