Kotlin基本特性

目录

函数

if

when

循环

面向对象 

继承

主构造函数

接口

修饰符

​编辑数据类

单例类

Lambda编程

集合

lambda用法

常见函数式API

空指针

判空辅助工具

字符串内嵌表达式 

函数

fun add1(a:Int,b:Int):Int{return a+b
}fun add2(a:Int,b:Int):Int = a+b // 只有一句的可以写成赋值的形式

if

fun func(a:Int,b:Int): Int {var ret:Int = if(a>b){a}else breturn ret
}

if语句有返回值,也可以写成赋值的形式:

fun func1(a:Int,b:Int):Int = if (a>b) a else b

when

fun getstring(str:String) = when(str) {"jack" -> 1"mike" -> 2else -> 3
}

when也有返回值,用法类似switch。

循环

    for(i in 1..10) // 左闭右闭区间println(i)for(i in 1 until 10) // 坐闭右开区间println(i)for(i in 1..10 step 2) // 每次+2println(i)for(i in 10 downTo 1) // 降序println(i)for(i in 10 downTo 1 step 2) // 降序+2println(i)

面向对象 

继承

open class Base
{var a:Int = 0
}
class dervice : Base()
{var b:Int = 0
}
fun main() {var base = Base()base.a = 1var der = dervice()der.a = 2
}

加上open关键字才能被继承 

主构造函数

open class Base(val aa:Int,val bb:Int)
{}
class dervice(val a:Int,val b:Int): Base(a,b)
{init {println("init")}
}
fun main() {val der = dervice(2,3)println(der.a)
}

主构造函数没函数体,但是需要其他操作可以写在init里面。若想调用父类的构造函数,可以在Base()里传参。

接口

interface JAY
{fun jay(name:String)fun chou(name:String)
}
class jaychou : JAY
{override fun jay(name: String) {println(name)}override fun chou(name: String) {println(name)}
}
fun main() {val jc = jaychou()jc.jay("Jay")jc.chou("Chou")
}

也存在默认的接口,即没有自己实现就调用默认的。

修饰符


数据类

数据类存在的意义:数据类 Data class 存在的意义是什么?_data class must have at least one primary construc-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/xiaokangss/article/details/130712827

data class Savadata(var name:String,var number:Int){}

data class比class 多实现了 toString()、hashCode()、equals()、copy()、componentN()方法。但是kotlin系统会默认帮我实现而不需要像JAVA那样重新这些方法。
hashCode()、equals()是用来比较对象内容是否相同,多用于HashMap等容器中;toString()是用来打印对象内容;copy()实现了复制功能;componentN()提供了快速访问元素的功能。data class只是是kotlin提供的具有常用数据model功能的类,用于提升开发效率。

单例类

object sig {fun test(){println("test")}
}
fun main() {sig.test()
}

不需要提供静态变量和静态方法,系统会自动帮我们生成。

Lambda编程

集合

val list = listOf("apple","banana","pear")
fun main() {for(i in list){println(i)}
}

用listOf来一次性将list元素给add进去,避免了多次add,简化了代码。 不过只适用于不可变集合。针对可变集合使用mutableListOf。同样的,针对set也是一样。可以调用setOf。而map除了可以map["apple"] = 1之外,可以使用mapOf:

val map = mapOf("apple" to 1,"pear" to 2)
fun main() {for(i in map){println(i.key + i.value)}
}

lambda用法

val list = listOf("apple","banana","pear")
val map = mapOf("apple" to 1,"pear" to 2)
fun main() {var maxnumber = list.maxBy { it.length }println(maxnumber)
}

上述代码求最长的单词。也可以用lambda:

fun main() {//var maxnumber = list.maxBy { it.length }var maxnumber = list.maxBy { i:String -> i.length }println(maxnumber)
}

lambda格式:{ 参数名1:参数类型,参数名2:参数类型 -> 函数体 } 

常见函数式API

map(对元素进行任意的映射转化)

fun main() {var newlist = list.map{it.toUpperCase() }for(i in newlist){println(i)}
}
// 将小写转化为大写

filter(过滤元素)

fun main() {var newlist = list.filter { it.length<=4 }for(i in newlist){println(i)}
}
// 筛选字母数量小于等于4的元素
fun main() {var newlist = list.filter { it.length<=4 }.map{it.toUpperCase()}for(i in newlist){println(i)}
}
// 也可以配合map使用

any(是否存在一个元素满足条件)

all(是否全部元素都满足条件)

var ret1 = list.all{it.length>=3}
var ret2 = list.any{it.length>=5}

空指针

kotlin在编译时期就把会存在空指针问题的情况就提前报错。为了防止区别哪些变量可以为空,设置了在类型后面加上?的形式。

fun test(num:Int?){if(num!=null){}} // 表示num可为空,并且一般需要加上判空

判空辅助工具

字符串内嵌表达式 

class test{var i = 1
}
fun main(){println("555${test().i}") // 执行结果5551
}

当表达式只有一个变量是,大括号也可以省略。

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

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

相关文章

CVPR 2024|多模态场景感知,高保真运动预测框架来了!

设想一下&#xff0c;你在家中准备起身&#xff0c;前往橱柜取东西。一个集成 SIF3D 技术的智能家居系统&#xff0c;已经预测出你 的行动路线&#xff08;路线通畅&#xff0c;避开桌椅障碍物&#xff09;。当你接近橱柜时&#xff0c;系统已经理解了你的意图&#xff0c;柜门…

代码随想录35期Day35-Java

Day35题目 LeetCode435.无重叠区间:移除几个元素,使得不重叠 核心思想:排序区间之后,如果重叠,更新下一个区间的右边界为最小值.如果重叠了,最少移除其中一个,更新移除的那个为最小的右边界之后就不会影响到之后的区间判断 class Solution {public int eraseOverlapInterval…

无限集中的最小数字

题目链接 无限集中的最小数字 题目描述 注意点 1 < num < 1000 解答思路 由题意得&#xff0c;可以理解为最初集合中有1~1000之间的所有数字&#xff0c;如果集合中存在数字&#xff0c;则添加时不会有任何操作&#xff1b;在移除集合中的元素时&#xff0c;会按顺序…

表格内容高效拆分,自定义行数随心所欲,让数据处理更高效!

在信息化社会的今天&#xff0c;表格成为了我们处理数据、整理信息的重要工具。然而&#xff0c;当表格内容过于庞大时&#xff0c;如何高效地拆分表格内容成为了摆在我们面前的一大难题。传统的拆分方法往往耗时耗力&#xff0c;且难以满足我们个性化的需求。 首先&#xff0…

视频号创作分成计划实战指南:保姆级教程,带你玩转新副业

视频号的月活跃用户数量已在去年突破了8亿大关&#xff0c;并且不断增长。 在这篇文章中&#xff0c;我将与大家分享视频号的运营玩法和作品创作方向。 一、玩法流程 开通条件 要开通创作者分成计划功能&#xff0c;需要满足以下条件&#xff1a; 粉丝数量达到100及以上。 …

【优选算法】——Leetcode——611. 有效三角形的个数

目录 ​编辑 1.题目 2 .补充知识 3.解法⼀&#xff08;暴⼒求解&#xff09;&#xff08;可能会超时&#xff09;&#xff1a; 算法思路&#xff1a; 算法代码&#xff1a; 4.解法⼆&#xff08;排序双指针&#xff09;&#xff1a; 算法思路&#xff1a; 以输入: nums …

Java虚拟机(JVM)中确保资源及时释放的策略

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;内存管理主要是通过垃圾回收&#xff08;Garbage Collection, GC&#xff09;来自动处理的。Java开发者通常不需要&#xff08;也不应该&#xff09;显式地释放对象内存&#xff0c;因为JVM的垃圾回收器会自动处理不再使…

k8s各个组件的作用

Kubernetes&#xff08;K8s&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化计算机容器化应用程序的部署、扩展和管理。以下是 Kubernetes 中的关键组件及其作用&#xff1a; API 服务器&#xff08;API Server&#xff09;&#xff1a; 作为集群中所有资源操作的入…

Android OpenMAX(五)高通OMX Core实现

上一节了解了OMX Core提供的内容,这一节我们看看高通OMX Core是如何实现的。本节代码参考自: omx_core_cmp.cpp registry_table_android.c qc_omx_core.h 1、OMX_Init/OMX_Deinit OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_Init() {DEBUG_PRINT(

Linux专题-Makefile(2)

本文主要分析Uboot的主Makefile 1.版本号 VERSION 1 PATCHLEVEL 3 SUBLEVEL 4 EXTRAVERSION U_BOOT_VERSION $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) VERSION_FILE $(obj)include/version_autogenerated.h这里需要注意最后一行&#xff0c;使用$(obj)解引…

跨平台移动应用开发指南:打造跨越iOS和Android的移动应用

跨平台移动应用开发已经成为许多开发者的首选&#xff0c;因为它可以节省时间、成本和精力&#xff0c;同时使得应用能够覆盖更广泛的用户群体。本指南将介绍跨平台移动应用开发的基本概念、流行的跨平台框架以及一些最佳实践&#xff0c;帮助您快速入门并打造出高质量的跨平台…

文本三剑客grep与正则表达式、元字符

正则表达式 正则表达式又称为正规表达式、常规表达式、在代码中常简写为regex、regex或RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串&#xff0c;简单来说&#xff0c;是一种匹配字符串的方法&#xff0c;通过一些特殊符号&#xff0c;实现快速查…

JetsonNano —— 2、对Nano板卡刷机后进行基础配置

说明 在完成上一节 “JetsonNano —— 1、Windows下对Nano板卡烧录刷机&#xff08;官方教程&#xff09;” 后&#xff0c;对新系统进行一些基础配置&#xff0c;以便使用更得心应手么。 基础配置 1、通过SSH连接Nano SSH是一种网络协议&#xff08;默认的端口号为22&#xff…

测试用例设计方法之因果图详解

一、因果图概述 因果图是从需求中找出因&#xff08;输入条件&#xff09;和果&#xff08;输出或程序状态的改变&#xff09;&#xff0c;通过分析输入条件之间的关系&#xff08;组合关系、约束关系等&#xff09;及输入和输出之间的关系绘制出因果图&#xff0c;再转化成判…

C++中的异常处理方式

目录 一、异常 二、C语言中对错误的处理 三、C中的异常处理 四、异常的抛出和捕获 五、异常的重新抛出 六、C标准库中的异常体系 七、异常的规范 一、异常 在C中&#xff0c;异常是程序运行期间发生的意外或错误情况。这些情况可能会导致程序无法继续正常执行&#xff0c;…

二维视觉尺寸测量简单流程

代码示例&#xff1a;opencv实战---物体尺寸测量_opencv尺寸测量精度-CSDN博客 灰度化 简化图像处理&#xff1a;灰度图像只包含亮度信息&#xff0c;不包含颜色信息&#xff0c;因此数据量比彩色图像小&#xff0c;处理起来更加简单和快速。这对于需要实时处理大量图像数据的场…

XTuner笔记

为什么要微调&#xff1a; 1. 模型不具备一些私人定制的知识 2。模型回答问题的套路你不满意。 对应衍生出来两种概念 增量预训练微调&#xff1a; 使用场景&#xff1a;让基座模型学习到一些新知识&#xff0c;如某个垂类领域的常识训练数据&#xff1a;文章、书籍、代码等…

Mac电脑安装打开APP显示问题已损坏 问题解决

当MAC电脑安装完软件打开时&#xff0c;显示文件已损坏&#xff0c;无法打开。搜了很多教程终于找到解决方案&#xff0c;记录下方便以后再用。 我的mac电脑是intel芯片的&#xff0c;如果你遇到这个问题&#xff0c;可以参考我的这个方案。 1.首先当打开软件后出现 “xx软件已…

Python 框架安全:SSTI 模板注入漏洞测试.

什么是 SSTI 模板注入 SSTI (Server-Side Template Injection) 是一种Web应用程序安全漏洞&#xff0c;它发生在应用程序使用模板引擎渲染用户输入时。当应用程序将用户输入直接插入到模板中而不进行充分的过滤和验证时&#xff0c;就可能导致SSTI漏洞。攻击者可以利用这个漏洞…

Selenium 保存会话信息避免重复登录实战!

前言 • 在一些实际开发场景中&#xff0c;我们在使用 Selenium 做自动化测试时需要保留用户的会话信息&#xff0c;从而避免重复登录&#xff0c;今天这篇文章就带大家实战如何使用 Selenium 保存会话信息。 版本 • Python 3.x 整体思路 • 当我们打开页面时&#xff0c;…