[Kotlin入门] 基础语法

Kotlin语法整理 阅读详情
AI摘要

本文介绍Kotlin的基础语法,包括变量和函数的定义、程序逻辑控制、面向对象编程、Lambda编程及空指针异常处理等内容。

一. 变量和函数

1. 变量

val 不可变变量;var 可变变量
Kotlin完全抛弃了Java中的基本数据类型,全部使用了对象数据类型。
优先使用val

2. 函数

Java中方法的叫法更普遍一些,Kotlin中函数的叫法更普遍一些;二者为同一东西

  • 标准写法
fun largerNumber(num1: Int, num2: Int): Int {
	return max(num1, num2)
}
  • 重要语法糖

当一个函数中只有一行代码时,Kotlin允许我们不必编写函数体,可以直接将唯一的一行代码写在函数定义的尾部,中间用等号连接即可。
kotlin具有优秀的推导机制,不用再显式地声明返回值类型。
因此可以写成:

fun largerNumber(num1: Int, num2: Int) = max(num1, num2)

二. 程序的逻辑控制

1. if 语句

与Java相比,可以有返回值

fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) {
num1
} else {
num2
}

2. When 语句

格式:匹配值 -> {执行逻辑}
带有返回值

fun getScore(name: String) = when (name) {
"Tom" -> 86
"Jim" -> 77
"Jack" -> 95
"Lily" -> 100
else -> 0
}

也可以进行类型匹配

fun checkNumber(num: Number) {
when (num) {
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("number not support")
}

3. For循环

  • 区间
    0…10 闭区间[0,10]
    for (i in 0 until 10 step 2) [0,10) 步长2
    降序区间 for (i in 10 downTo 1)

二. 面向对象编程

1. 继承与构造函数

  1. 在Kotlin中任何一个非抽象类默认都是不可以被继承的,相当于Java中给类声明了final关键字;要继承必须加上open关键字
  2. 构造函数:主构造函数和次构造函数

主构造函数:只能有一个,无函数体,直接定义在类名后面,如果需要逻辑写在init里面(一般不会这么操作的)

// person是无参主构造函数;也必须带括号
class Student(val sno: String, val grade: Int) : Person() {
	init {
	println("sno is " + sno)
	println("grade is " + grade)
	}
}
// 假设person构造函数带参数
open class Person(val name: String, val age: Int) {
...
}
// 注意此时student参数grade int不能带val
class Student(val sno: String, val grade: Int, name: String, age: Int) :
Person(name, age) {
...
}

次构造函数:可以有多个,有函数体,必须调用主构造函数

class Student(val sno: String, val grade: Int, name: String, age: Int) :
Person(name, age) {
	constructor(name: String, age: Int) : this("", 0, name, age) {}
	constructor() : this("", 0) {}
}
//第一个次构造函数接收name和age参数,然后它又通过this关键字调用了主构造函数,并
//将sno和grade这两个参数赋值成初始值;
//第二个次构造函数不接收任何参数,它通过this关键字调用了我们刚才定义的第一个次构造
//函数,并将name和age参数也赋值成初始值

类中只有次构造函数,没有主构造函数

// 不需要括号;采用super
class Student : Person {
constructor(name: String, age: Int) : super(name, age) {
}
}

2. 接口 & 函数的可见性修饰符

冒号,允许对接口进行默认实现
在这里插入图片描述

3. 数据类与单例类

data class x {}
object {}

三. Lambda编程

添加链接描述

四. 空指针异常

1. 可空类型系统

// 如果是Java会报错;Kotlin则不会
// Kotlin默认所有的参数和变量都不可为空,所以这里传入的Study参数也一定不会为空
// Kotlin将空指针异常的检查提前到了编译时期
fun doStudy(study: Study) {
	study.readBooks()
	study.doHomework()
}

?表示study可以为空

fun doStudy(study: Study?) {
	if (study != null) {
		study.readBooks()
		study.doHomework()
	}
}

2. 判空辅助工具

?. 就是当对象不为空时正常调用相应的方法,当对象为空时则什么都不做
?: 这个操作符的左右两边都接收一个表达式,如果左边表达式的结果不为空就返回左边表达式的结果,否则就返回右边表达式的结果。
!! 的意思是这个参数如果为空,就抛出异常。
let函数处理全局变量判空

fun doStudy(study: Study?) {
	study?.let {
		it.readBooks()
		it.doHomework()
	}
}

五. Kotlin中的小魔术

1. 字符串内嵌

"hello, ${obj.name}. nice to meet you!"
println("Cellphone(brand=$brand, price=$price)")

2. 函数的参数默认值

fun printParams(num: Int = 100, str: String) {
	println("num is $num , str is $str")
}
fun main() {
	printParams(str = "world")
}

有了这个功能,因此不需要此构造函数。例子如下:

class Student(val sno: String, val grade: Int, name: String, age: Int) :
Person(name, age) {
	constructor(name: String, age: Int) : this("", 0, name, age) {
	}
	constructor() : this("", 0) {
	}
}

可以写成

class Student(val sno: String = "", val grade: Int = 0, name: String = "", age: Int = 0) :
Person(name, age) {
}

六. 泛型的引入写法

在 Kotlin 中,引入泛型的函数可以让你编写更通用和灵活的代码。下面是一些关于如何定义和使用泛型函数的基本示例:

1. 基本泛型函数定义

fun <T> printElement(element: T) {
    println(element)
}

在这个示例中,<T> 是一个泛型类型参数,表示函数 printElement 可以接受任何类型的 element。

2. 带有多个泛型类型参数的函数

fun <T, R> combineElements(first: T, second: R): String {
    return "$first and $second"
}

这里,<T, R> 表示函数 combineElements 有两个泛型类型参数 T 和 R,函数可以接受任意类型的 first 和 second 参数,并将它们合并成一个字符串。

3. 泛型函数与约束

你可以为泛型参数指定约束,以限制可以传入的类型:

fun <T : Comparable<T>> findMax(a: T, b: T): T {
    return if (a > b) a else b
}

在这个示例中,T : Comparable<T> 表示 T 必须实现 Comparable<T> 接口,这样才能使用 > 运算符进行比较。

4. 泛型函数与上下文

如果你需要使用泛型函数与上下文相关的功能,可以这样做:

inline fun <reified T> isInstance(value: Any): Boolean {
    return value is T
}

这里,reified 修饰符使得在函数体内可以使用 T 类型的信息,从而可以实现类型检查等功能。

5. 泛型函数在类中的使用

泛型函数也可以用在泛型类中:

class Box<T>(val value: T) {
    fun getValue(): T {
        return value
    }
}

在这个示例中,Box 是一个泛型类,它有一个类型参数 T,并且包含一个返回 T 类型的函数 getValue。

通过这些示例,你可以看到 Kotlin 中泛型的强大灵活性,它使得你可以编写更加通用和可复用的代码。

Kotlin 基础语法详解:从入门到精通 本教程涵盖了 Kotlin 基础语法的主要部分,从变量、数据类型到函数、类、接口、异常处理等。通过学习这些基础知识,你将能够编写简单的 Kotlin 程序,并进一步学习更高级的特性。 阅读详情

相关推荐

Kotlin基础语法

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源. Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行. 在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言. Kotlin实现 He...

你只是看起很努力 1232

kotlin基本语法

函数 表达式:fun 方法名(参数名1: 数据类型, 参数名2: 数据类型): 返回值数据类型{ } 普通用法 fun test(a: Int): String { return ""; } // 将表达式作为函数体,花括号可以省略 fun test1(a: Int): Int = 1; // 函数返回无意义的值Unit,返回值可省略 fun printSum(a: Int, b: Int) { println("sum of $a and $b is ${a + b}") }

Florizt 5999

Kotlin 入门教程:基础语法

变量是计算机存储和读取数据的标识符,相当于给数据“取一个名字”。

月入鱼饵的博客 1092

一文掌握Kotlin:Kotlin基础语法

Kotlin并非另一门“昙花一现”的编程语言。其诞生于JetBrains——这家以打造顶尖开发工具闻名世界的公司,经过十余年的精心打磨,最终在Java生态的坚实基础上,开辟出了一条更现代、更安全、更富有表现力的道路。它既能够与现有的Java代码无缝互操作,又通过简洁的语法设计、空安全和函数式编程特性,显著提升了开发效率和代码质量。

bjxiaxueliang的CODING小栈 5923

3、Kotlin 编程入门与基础语法详解

本文详细介绍了 Kotlin 编程语言的基础知识,包括开发工具如 IntelliJ IDEA 的 REPL、Kotlin Playground、数据科学笔记本的支持,以及 Eclipse 的项目搭建。内容涵盖 Kotlin 的基础语法,如注释、变量定义、类型推断、标识符规则和可变变量的使用,并通过对比 Java 突出 Kotlin 的优势。适合初学者快速入门 Kotlin 编程。

s8t9u0v1w的博客 74

STM32 Modbus-RTU从零到实战:手把手教你用HAL库实现工业通信(附完整代码)

本文详细介绍了如何使用STM32 HAL库从零开始实现Modbus-RTU从机通信。内容涵盖RS485硬件设计、CubeMX串口与定时器配置、基于空闲中断的高效数据接收、协议栈状态机设计、CRC16校验实现以及常用功能码处理。文章提供了完整的代码框架和调试方法,帮助开发者快速构建稳定的工业通信节点。

weixin_28278377的博客 186

Kotlin入门1. 语法基础

Kotlin是一种静态编程语言,由JetBrains开发。它被设计为与Java兼容,并且可以在Java平台上运行。Kotlin支持现代编程语言的许多特性,如函数式编程、对象导向编程和元编程。这使得Kotlin能够方便地与Java代码混编,并且可以在没有JVM(Java虚拟机)的设备上运行。Kotlin可以编译成Java字节码,因此可以在Java虚拟机上运行。此外,Kotlin也可以编译成JavaScript,使得它可以在浏览器中运行。这使得Kotlin成为一个适用于各种平台的多平台语言。

猿来这样-谢厂节的博客 398

分位数映射数据后处理-Quantile Mapping后处理 (R语言)

统计后处理器基本上是统计模型,将观察到的关注变量与从气象或水文模型的直接模型输出(DMO)导出的适当预测变量相关联。统计后处理的重要性早已在气象预报中得到认可。早期的工作包括完善的预测(perfect prognosis),模型输出统计(MOS)和模拟方法(analog method)等模型。 近年来,已经提出了许多其他后处理方法,包括秩直方图校准(rank histogram calibrati...

水滴石穿,绳锯木断 1万+

【Kotlin入门之路】基础语法

Hello World 老规矩,让我们怀念一下——用Kotlin输出Hello, World!: fun main() { println("Hello World") } 和其他语言相似,Kotlin也是以main()函数作为程序运行的入口的。 变量声明 Kotlin声明变量使用两个关键字:val和var。 val:声明一个值不可更改的变量。可以在声明的适合初始化,也可以先声明后初始化,一...

也说安卓 252

某手 v8.x 签名计算方法(二) sig和__NS_sig3

一、目标 今天的目标是 sig和__NS_sig3,咱们抓个包先 二、步骤 sig目测像是MD5 先jadx搜索 sig= ,没有找到结果。 再试试 sig ,晕倒 6k多个结果,突然灵光一闪,这些参数,必然是要加入到 Map中,那么我们搜索 "sig" 应该就是这个 CPU.getClock,Hook之 var signCls = Java.use('com.yxcorp.xxx.util.CPU'); signCls.getClock.implementation = function(a,b,c

fenfei331的博客 2428

word2vector入门教程

摘要: 网上已经有许多对w2v的介绍了,这里只是做一个简单的概括。下面这篇文章我认为是关于W2V写的比较好的文章,读者有兴趣可以先参考一下: w2v参考文章1 另外一篇是关于Skip-Gram和CBow的介绍。 Skip-Gram&CBOW 逻辑比较清晰的综述文章: 综述文章 数学原理很清晰很短的一篇文章(也有关于负采样的简单说明) 参考文章 1.什么

SCUT_Sam 1万+

快速简单入门Kotlin——基础语法(第一天)

本文介绍了Kotlin语言的基础知识,面向有Java基础的安卓开发者。主要内容包括:Kotlin相比Java的优势(简洁性、空安全、扩展函数等)、发展历史(2017年成为安卓官方语言)以及基本语法(变量声明、数据类型、控制流等)。重点讲解了if/when条件语句、for/while循环语句的用法,并提供了大量代码示例。文章旨在帮助Java开发者快速掌握Kotlin的基础语法特性,为后续学习Jetpack Compose等现代框架打下基础。

Crogin的博客 1756

深入解析:如何基于开源OpENer开发EtherNet/IP从站服务

通过OpENer开源库,开发者可以快速实现符合ODVA规范的EtherNet/IP从站设备,降低开发成本并提高系统灵活性。本文详细介绍了EtherNet/IP协议原理、OpENer库的特点与优缺点,以及二次开发的完整流程。通过遵循本文提供的指南,开发者可以成功构建出工业级的EtherNet/IP通信设备。

极地星辰 2998

Kotlin环境搭建与基础语法入门

Kotlin入门指南:环境搭建与基础语法。首先安装JDK 17+和IntelliJ IDEA,创建Kotlin项目后编写"Hello World"程序,学习main()函数和println()输出。掌握变量声明(var/val)、类型推断和基本数据类型(Int、Double、Boolean等)。实践任务包括输出个人信息和计算圆面积。关键点包括字符串模板$使用和不可变变量val的特性。下一步将学习控制流语句。

weixin_43578304的博客 802

【47】软考软件设计师——全真模拟卷(下午题)|5道案例分析+答题模板+评分标准

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第47篇,属于**模块六:冲刺与模拟**第四篇,严格遵循软考下午题真题规范(5道案例分析题,150分钟,满分75分,45分及格),覆盖数据流图(DFD)、E-R图与关系模式、UML类图与用例图、算法设计与代码填空、设计模式应用五大核心题型。全文采用“真题级案例+分步答题模板+采分点明细+评分标准”的形式,每道题配套“审题技巧→解题步骤→规范作答模板→常见错误扣分点”,深度拆解案例分析题的得分逻辑,帮助考生掌握“按点踩分、规范表述、避坑扣分”的核心能力

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 685

5实践报告撰写

一 项目流程 明确标准 确定分析目标 寻找分析数据 清洗数据 描述性分析 诊断性分析 提出建议 撰写报告 二 确定分析目标 什么是你感兴趣的? 什么是你熟悉的? 什么是你擅长的? 1 电商零售行业 商品销量分析 价格分析 评价分析 ...... 2 自媒体行业 广告投放力度分析 广告投放回报分析 不同类型的产品分析 ...... 3 金融行业 股票价格分析 信贷业务违约分析 客户画像分析 ...... ...

waywardG的博客 2832

Kotlin入门之第 0 篇基础语法

前言 - Kotlin自从被Google定义为官方开发语言后,一直很火.那么作为Android开发人员,Kotlin还是有必要学一下的. 那么此Kotlin系列就是记录自己学习Kotlin的过程,希望与大家共勉! - 我们学习一门语言,我认为最好的方法是从最基础的语法学起.只有知晓了基础的语法,才能去搭建更复杂层次的逻辑结构代码! - - 本系列是根据官网的文档来进行的. - - 本人水平有...

李孝贤 281

量化交易零基础入门教程

特点 从零开始教编程。靠谱的量化交易学习资源稀少,且具有不讲编程、代码较难、过多等不适合新手等问题,本教程中则会从零开始教编程,解决量化入门过难过编程门槛这一问题。 量化与编程相结合。本教程不仅会教编程,而且会尽量结合量化情景,减少“我要做量化交易为什么要看这些用来培训程序员的东西”的愤懑。 简易精炼,快速入门。尽量只讲最核心最常用的知识,助你快速摆脱想学习量化却处处陌生不知所措的茫然的新手阶段。 读前说明 文后会有自测与自学,包括一些额外的延伸自学内容以及稍有难度的自测题目。 最最最基础的股票.

JanLEE 2885

kotlin 语法基础入门

一、变量的定义 fun main(){ // 可变变量定义 var 关键字 var name : String = "李国菁" // 不可变变量定义: val 关键字,只能赋值一次的变量(像Java中final修饰的变量) val age : Int = 10 // 下面这句就有问题,不能再次更改age的值 // age = 20; println(name) // 典型的类型推到出来,其实可以不用写 : String , 如果写上的话,颜色

weixin_39413778的博客 479

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Kotlin基础语法入门

定义值Boolean类型 val demo1:Boolean=true val demo2:Boolean=false val只读、var可变 Number类型有:Double 、Float 、Long 、Int、 Short 、Byte val maxlong:Long=Long.MAX_VALUE 构造字符串 val ...

bakk0615的博客 199

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Kotlin 入门基础语法学习笔记

敲了一天的kotlin基础语法,整理归纳到一个类里面,便于以后忘记的时候复习。 /** * Created by GG on 2017/11/20. */ //main函数 fun main(args: Array) { var testMain = TestMain() print(testMain.array()) } class TestMain { //单例

化身孤岛的瓜 932

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Kotlin入门之Kotlin基础语法

参考链接菜鸟教程 本文的内容如下: 包声明 默认导入 函数定义 可变长参数函数 lamada匿名函数 定义常量与变量 注释 字符串模板 Null检查机制 类型检测与类型自动转换 区间 包声明 package com.zfc.kotlin //声明包名 import com.zfc.person.Person //引用包名 fun main(args...

C安君的博客 360

Kotlin 基础语法入门教程

在 Kotlin 中,package 声明通常位于源文件的最顶部,用于组织代码。导入其他包的类或函数使用 import。package com.example.learnkotlin import kotlin.math.PI import kotlin.text.* // 导入整个包println("圆周率的值是: $PI ") }注意:Kotlin 不要求目录结构与包名一致,但推荐保持一致以便维护。你已经学习了 Kotlin 的以下基础语法:• 包、入口函数、输入输出• 函数定义、变量、类与继承。

bilinruanjian的博客 402

《Kotlin入门实战》CH2 | Kotlin 语法基础

写在前面 kotlin 为啥用fun声明方法? JetBrains : We use “fun” because we like it - and yes, we do know what the word means in English. JVM语言生态 需要注意的式Kotlin是基于JVM的语言,而不是基于Java的语言,他们都可以翻译成Class字节码。 kotlin ...

落红不是无情物 218

Kotlin语法--基础入门

Kotlin

yyc2023的博客 675

Kotlin与Java语法区别_kotlin语法和java语法对比,零基础入门到精通,收藏这篇就够了

Kotlin作为现代编程语言,在语法上与Java既有相似之处,也有许多创新和改进。以下是Kotlin与Java在语法上的主要区别: Kotlin Kotlin使用(不可变)和(可变)替代Java的final和非final变量 类型推断是Kotlin的默认行为 2. 函数定义 Java Kotlin Kotlin使用< Java开发的就业市场正在经历结构性调整,竞争日益激烈 传统纯业务开发岗位(如仅完成增删改查业务的后端工程师)的需求,特别是入门级岗位,正显著萎缩。随着企业技术需求升级,市场对J

Libra1313的博客 1068
上一篇: 【Android生成APK】 APP生成正式签名的APK
下一篇: [Kotlin入门] 单例、数据类、静态
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值