当前位置: 首页 > news >正文

kotlin学习 基础知识一览

目录

    • 在android studio上学习kotlin
    • 变量
    • 函数
    • 逻辑控制
      • if条件语句
      • when条件语句
    • 循环语句
      • for-in循环
        • 区间
    • 类与对象
      • 继承与构造函数
        • open关键字
        • 主构造函数与次构造函数
          • 主构造函数
          • 次构造函数
    • 接口
      • 接口的基本使用
      • 函数的可见性修饰符
    • 数据类与单列类
      • 数据类
      • 单例类

在android studio上学习kotlin

在android studio中创建一个kotlin语言的android项目,创建一个.kt文件learn。
在这里插入图片描述
编写一个main()函数。

package com.bz.yh.xd.testkotlinclass Learn {
}fun main(){println("hello k")
}

点击这个箭头,就运行了。
在这里插入图片描述
结构如下
在这里插入图片描述

变量

val 用来声明一个可变的变量,这种变量在初始赋值之后就再也不能重新赋值。
var用来声明一个可变的变量,这种变量在初始赋值后仍然可以再被重新赋值。

fun main(){var  a  = 1println("a = " + a)
}

输出结果

a = 1Process finished with exit code 0

上面会自动推导出变量a的类型,如果这个变量是延迟赋值的话,kotlin就无法自动推导了,需要显示的声明。

 val  a: Int  = 1

kotlin没有基本数据类型,看下图。
在这里插入图片描述

函数

语法规则

fun methodName(param1 :Int ,param2 Int): Int{returon 0
}

fun是定义函数的关键字。
methodName自定义的函数名称。
括号里的是参数,参数声明格式是“参数名:参数类型”。
参数括号后面那部分是可选的,用于声明返回的类型。如果不需要返回类型,则可以直接不写。
示例:

fun largeN(num1: Int, num2: Int): Int {return max(num1,num2)
}fun main() {val a = largeN(10,20);println("max = = $a")
}

打印结果

max = = 20Process finished with exit code 0

语法糖,当一个函数中只有一行代码时,kotlin允许我们不必编写函数体,直接将唯一的一行代码写函数定义的尾部,中间用等号连接即可。

fun largeN2(num1: Int, num2: Int): Int = max(num1,num2)
能推导出返回类型,可以省略返回类型
fun largeN2(num1: Int, num2: Int) = max(num1, num2)

逻辑控制

if条件语句

与java不同的事是kotlin的if可以有返回值。

fun largeN3(num1: Int, num2: Int): Int {var value  = 0if(num1 > num2){value = num1;}else{value = num2}return value
}

有返回值的if


fun largeN4(num1: Int, num2: Int): Int {var value = if (num1 > num2) {num1} else {num2}return value
}

去掉value

fun largeN4(num1: Int, num2: Int): Int {return if (num1 > num2) {num1} else {num2}
}

使用=

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

when条件语句

先用if实现

fun getType(testType: Int): String {return if (testType == 100) {"single"} else if (testType == 110) {"mul"} else {"fill"}
}

when实现

fun getType2(testType: Int): String {return when (testType) {100 -> "single"110 -> "mul"else -> "fill"}
}
使用=
fun getType2(testType: Int) = when (testType) {100 -> "single"110 -> "mul"else -> "fill"
}

语法格式

	when (参数) {匹配值-> {执行逻辑}匹配值-> {执行逻辑}匹配值-> {执行逻辑}}

还能类型匹配

fun checkNumber(num: Number) {when (num) {is Int -> println("is Int")is Double -> println("is Int")else -> println("1111 222 333")}
}

无参数的when
可以对变量进行特殊处理

Kotlin中判断字符串或对象是否相等可以直接使用==关键字

fun getScore(name: String) = when {name.startsWith("tom") -> 86name == "Jim" -> 86else -> 0
}

循环语句

while循环与java中的没有区别。

for-in循环

区间

创建一个0到10的区间。包含两端。
…是创建区间的关键字

    val range =0..10

示例

fun main() {for ( i in 0..10){println(i)}
}

结果

0
1
2
3
4
5
6
7
8
9
10Process finished with exit code 0

创建一个左闭右开的区间,使用until

fun main() {for ( i in 0 until 10){println(i)}
}

结果

0
1
2
3
4
5
6
7
8
9Process finished with exit code 0

使用step关键字跳过某些数据

fun main() {for ( i in 0 until 10 step 2){println(i)}
}

结果

0
2
4
6
8Process finished with exit code 0

…和until关键字要求区间的左端必须小于区间的右端,是一个升序。
创建一个降序的区间,要使用downTo关键字。

fun main() {for ( i in  10 downTo  0){println(i)}
}

结果

10
9
8
7
6
5
4
3
2
1
0Process finished with exit code 0

类与对象

kotlin中创建类也是使用class关键字来创建。

class User {var id = -1;var name = "";fun login() {println("name is " + name + ",id  is " + id)}

创建对象

 val u = User();

示例

fun main() {val u = User();u.name ="Test"u.id = 1520u.login();
}

结果

name is Test,id  is 1520Process finished with exit code 0

继承与构造函数

open关键字

在kotlin中,默认所有非抽象类都是不可以被继承的。
要想被继承需要使用open关键字。

open class Person {var age = 0
}

user继承person使用:

class User : Person() {var id = -1;var name = "";fun login() {println("name is " + name + ",id  is " + id)}
}
主构造函数与次构造函数
主构造函数

主构造函数没有函数体。直接定义在类名的后面。

class User(val id: Int, val name: String) : Person() {fun login() {println("name is " + name + ",id  is " + id)}
}

上面实例化时,就需要穿参数。

fun main() {val u = User(1520,"Test")u.login();
}

如果需要再主构造函数中,处理一些事情,可以在init结构体中。

class User(val id: Int, val name: String) : Person() {init {println("init")}.......
}
次构造函数

当一个类既有主构造函数又有次构造函数,所有的次构造函数都必须调用主构造函数。
次构造函数通过construct关键字类 定义。
父类

open class Person(val age : Int) {}

子类

class User(val id: Int, val name: String, age: Int) : Person(age) {constructor(age: Int):this(0,"Test",age)constructor():this(10)
}

第一个次构造函数集体户搜age参数,通过this关键字调用了主构造函数,并将id置0,name置Test。
第二个次构造函数不接受任何的参数,通过this关键字调用定义的第一个次构造函数关键字。

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


open class Person(val age : Int) {}
Person没有括号
class User2 : Person {constructor(age: Int) : super(age)
}

接口

接口的基本使用

一个类只能继承一个父类,可以实现任意多个接口。
创建接口

interface Study {fun readBooks()fun drawPictures()
}

通过:来实现接口,继承也是如此。接口后面不需要加括号。使用override 关键字来重写父类或者实现接口中的函数。

class Student(val name: String, val sno: Int) : Study {override fun readBooks() {println("name is " + name)}override fun drawPictures() {println(name + "draw Pictures ")}
}

kotline可以对接口中的方法进行默认实现。当一个类去实现这个接口,drawPictures函数可以自由选择实现或者不实现。

interface Study {fun readBooks()fun drawPictures(){println("default  draw Pictures")}
}

函数的可见性修饰符

函数的可见性修饰符public、private、protected、internal。
private修饰符与java中作用一样,表示只对当前类内部可见。
public修饰符与java中作用一样,对所有类可见,kotlin中public修饰符是默认项。
protected表示只对当前类和子类可见。
internal表示对同一模块的类可见。

数据类与单列类

数据类

用java和kotlin创建word类

java版

public class Word {String enContent;String cnContent;public Word(String enContent, String cnContent) {this.enContent = enContent;this.cnContent = cnContent;}@Overridepublic boolean equals(Object o) {if (!(o instanceof Word word)) return false;return Objects.equals(enContent, word.enContent) && Objects.equals(cnContent, word.cnContent);}@Overridepublic int hashCode() {return Objects.hash(enContent, cnContent);}@Overridepublic String toString() {return "Word{" +"enContent='" + enContent + '\'' +", cnContent='" + cnContent + '\'' +'}';}
}

kotlin版,创建data class

data class Word(val enContent: String, val cnContent: String)

data是数据类的关键字。可以明显的看出来,减少了很多的工作量。

单例类

只需要把class改成object,就可以了。不需要私有化构造函数,也不需要提供getInstance()。kotlin会自动创建一个实例,并保证全局只会存在一个Singleton 。
示例

object Singleton {fun test() {println("test")}
}

使用

Singleton.test()
http://www.dtcms.com/a/561920.html

相关文章:

  • 开通建立企业网站谷歌浏览器下载安卓版
  • 基于 venv 快速搭建 Python 环境
  • C 文件操作全解速览
  • MCP指南
  • 基于双向时序卷积网络(BiTCN)与支持向量机(SVM)混合模型的时间序列预测代码Matlab源码
  • 怎样免费做一个网站免费推广app是什么意思
  • 构建现代Web应用:使用React框架打造单页面应用
  • 仿站是什么企业vi设计欣赏
  • 招聘 负责网站开发购买了域名怎么使用
  • C++信息学奥赛 递推-动态规划 数塔与过河卒模型实战解析 图例+详解+状态转移方程
  • 具身智能实战(一):物体的抓取1(sdk)
  • 公网ip与内网ip
  • 04-深度学习的基本概念:涵盖深度学习中的关键术语和原理
  • 下海做公关的网站类似于凡科的网站
  • WSL子系统(Ubuntu)安装Docker
  • 服装网站建设策划案杭州设计公司logo
  • Linux | i.MX6ULL Mqtt 移植教程
  • 谷歌 网站做推广中国住建部
  • 临海受欢迎营销型网站建设百度一下你就知道了主页
  • SlideSCI:PPT功能增强
  • DevOps工具链对比,CodeArts和TikLab哪一款更好用?
  • 商城网站系统建设方案做网站报价出名的
  • 面向IT和OT系统一线开发者的UNS(统一命名空间)介绍
  • 重庆最便宜的网站建设公司2024年新冠第三波症状分析
  • 【2025 SWPU-NSSCTF 秋季训练赛】gift_F12
  • bevfusion在j6算力评估
  • CSS margin 折叠现象的实际代码示例
  • 企业网站推广宣传方案wordpress 文件下载插件
  • LinuxMirrors开源工具
  • 长春专业做网站做品牌网站怎么样