Kotlin 基础教程一

news2024/11/25 12:02:42

 

Kotlin 基本数据类型

Java           |    Kotlin

byte                 Byte

short                 Short

int                   Int

long                Long

float                Float

double                Double

boolean                Boolean       

char                Char

数据类型之间可以相互转化 比如

var index = 10       index.toLong,index.toDouble ...等

声明变量一般为  var 赋值变量  val 表示常量

可以显示声明类型:

var name : String = "Csdn"

也可以隐式声明:

var name = "Csdn"

val 修饰的一般为常量 不可改变  例如:

val name = "Android"

name = "Hello" 就会报错

修饰方法 一般为fun 例如:

fun getNumber(index : Int) : Int 

getNumber(Index : Int) 代表传入一个Int的值 而函数中 : 后面的则为返回类型

无返回类型一般不用写,也可以写Unit

继承和实现:

Java 继承是extends  而Kotlin就是  : 

比如: class A extnds B ,Kotlin则是class A : B ()

实现 Java是implements 而Kotlin  则是 直接实现的类的方法或者其他的属性

Kotlin特性之空安全

比如:private var name : String 这样写是报错的 因为没有初始化 为Null

如果可能需要为null或者避免检验  可以这样写: private var name : String? = null

Java避免空属性可以用注解 @NonNull @Nullable

kotlin中如果声明可为空 也就是 var name : String? = null 调用时会报错 

如果强行调用 有两种方式:

安全调用value?.xxx 用?安全调用 为空则不调用

value!!.xxx强行调用,可能会报空指针

(变量后面有感叹号!代表非Kotlin声明的 比如是Java 等)

延迟初始化之 lateinit

lateinit 修饰的不能有初始值

比如 val lateinit name : String

类型判断

如果不确定数据类型 java中则是 instanceof 而Kotlin中则是 is

强制类型转换:

java中则是  A a = (A) value ,kotlin则是 as  

获取class

java获取class 比如Main.class, value.getClass

kotlin获取为  Main::class ,获取Java的class  则是 Main::class.java 

创建实例:

java中 通过new 创建 调用有参或者无参构造

kotlin中则是直接 类名() 参数  比如Intent, java:new Intent(xx,xx);kotlin Intent(xx,xx)

get/set

kotlin 声明属性时候默认会创建get/set 例如 :

var name : String? = null

        get(){

return field

}set(){

       field = name

}

构造器

constructor 函数 分为无参数:

constructor(){

}

有参数:

constructor(name : String){

}

@JvmField

如果成员变量中使用@JvmField则生成一个public的成员变量 不会生成get set

类的继承

java 所有的类 默认继承Object

Kotlin 默认 Any (更精简)

java void 对应kotlin Unit

构造器相互调用

单参数调用多参数 使用this(参数1,参数2...)

constructor(context : Context) this(context,null)

数组:

java中通过 []声明一维和二维 比如 int [] xx

kotlin则是 通过 arrayOf 比如 val numberList = arrayOf(1,2,3) 这种写法会自动装箱,造成不必要的内存开支,基本数据类型 比如int  可以使用intArrayOf 比如 val intArr : IntArray = intArrayOf(1,2)

intArrayOf  FloatArrayOf 等

数组长度表示:在Java中 数组[ ] 长度表示为length  而Kotlin 则是 size

静态函数

java使用 static

kotlin : 1 定义在函数 比如 fun getMax() 通过导入包调用函数 称为顶级函数 类似于Java XXX.getMax()

object

kotlin 可以通过object 声明一个类,这个类中的变量和函数会变成全局的

并不是静态函数,而是自动创建这个类的单例对象,然后通过单例对象访问这个类

如 object V {} 这里面声明的函数是静态的 可以V.xxx调用,如果在Java中调用v的函数

则需要V.INSTANCE.getXXX()

companion object 静态变量修饰

类中的单利对象 比如 class Rock : A {

companion object{

        private lateinit var index : Value?

        fun getValue() : Value{

                return value

        }

}

fun setValue (value : Value){

        value = this;

}

}

可以在object声明的函数方法中加入@JvmStatic 声明为静态函数

@file

例如在类的开头:@file:JvmName("xxx") 作用对象为文件

$

简化字符串模板可以省略拼接字符串+ 比如 var name : String = "Key$name"

object : params 等同于创建一个内部类

in

在xx 区间 

在Java中表示 if (number > 200 && number < 600)

kotlin if (number in 200..600) 区间范围

when

类似于java的swith 同时支持表达式 比如 if xx else if xx else if xx

可以用when (code )  in 200 -> { } in 300 ->{} else ->{}

接口

也是用interface 定义 

抽象

也是用abstract定义,构造器调用父类使用 : super(xxx) 

枚举

使用 enum class 定义 (继承Annotation)

使用enum进行定义enum class Type{ A {} abstract fun type()}

fun

用于修饰方法

编译期常量 const

在 companion object{

        const val NAME = "name"

}

引用外部对象属性

java 通常是类名.this.变量名

kotlin this@外部类类名.成员以及变量

创建集合 

java  new ArrayList

kotlin : ArrayList 也可以用 arrayListOf创建 或者 MutableList

 

listOf / List 不支持修改 MutableList支持修改 -----Map HashMap/MutableMap同理

遍历:

foreach 

java : for ()

kotlin in  for (value : Value in list)

静态内部类

internal 可进行修饰符,当前模块可见

inner 修饰内部类 但是不能存在compaion  object 此对象

kotlin   在普通类和方法中默认是final 修饰的 否则需要用abstract / open /override 

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

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

相关文章

PHP最简单自定义自己的框架view使用引入smarty(8)--自定义的框架完成

1、实现效果。引入smarty&#xff0c; 实现assign和 display 2、下载smarty&#xff0c;创建缓存目录cache和扩展extend 点击下面查看具体下载使用&#xff0c;下载改名后放到extend PHP之Smarty使用以及框架display和assign原理_PHP隔壁老王邻居的博客-CSDN博客 3、当前控…

xmind用例数据上传至禅道

xmind格式参考&#xff0c;只需要在一级子主题填写对应用例模块ID&#xff0c;其余格式随意即可生成用例并直接上传到禅道&#xff1a; 代码里需填写禅道对应登录账号及用例所属产品 import requests import json import re import hashlib import pprint import threading fr…

并发——Atomic 原子类总结

文章目录 1 Atomic 原子类介绍2 基本类型原子类2.1 基本类型原子类介绍2.2 AtomicInteger 常见方法使用2.3 基本数据类型原子类的优势2.4 AtomicInteger 线程安全原理简单分析 3 数组类型原子类3.1 数组类型原子类介绍3.2 AtomicIntegerArray 常见方法使用 4 引用类型原子类4.1…

段页式储存结构

题目&#xff1a;假设段页式储存结构系统中的地址结构如下图所示 从图中可知段号22-31占了10位&#xff0c;页号12-21占了10位&#xff0c;页内地址0-11占了12位 段&#xff1a; 最多有2^101024个段 页&#xff1a;每段最大允许2^101024个页 页的大小&#xff1a; 2^124x2^1…

【C++精华铺】6.C++类和对象(下)类与对象的知识补充及编译器优化

目录 1. 再谈构造 1.1 成员变量的初始化&#xff08;初始化列表&#xff09; 1.2 初始化列表的行为 1.3 explicit关键字 2. 类中的static成员 2.1 静态成员变量 2.2 静态成员函数 3. 友元 3.1 友元函数 3.1 友元类 4. 内部类 5. 匿名对象 6. 对象拷贝时候的编译器优化…

Linux网络编程 socket编程篇(一) socket编程基础

目录 一、预备知识 1.IP地址 2.端口号 3.网络通信 4.TCP协议简介 5.UDP协议简介 6.网络字节序 二、socket 1.什么是socket(套接字)&#xff1f; 2.为什么要有套接字&#xff1f; 3.套接字的主要类型 拓】网络套接字 三、socket API 1.socket API是什么&#xff1f; 2.为什么…

Qt通过QSS设置QPushButton的样式

同时设置QPushButton的文字样式和图标的方法 为了美化界面&#xff0c;有时候需要修改QPushButton的样式&#xff0c;让一个QPushButton上面既要显示图标&#xff0c;又要显示文字内容 起初我的做法是重写QPushButton&#xff0c;这样做可以实现&#xff0c;但是有几个问题 实现…

【数学建模】逻辑回归算法(Logistic Resgression)

逻辑回归算法 简介逻辑回归与条件概率绘制sigmoid函数 简介 逻辑回归算法是一种简单但功能强大的二元线性分类算法。需要注意的是&#xff0c;尽管"逻辑回归"名字带有“回归”二字&#xff0c;但逻辑回归是一个分类算法&#xff0c;而不是回归算法。 我认为&#xff…

通达OA SQL注入漏洞【CVE-2023-4165】

通达OA SQL注入漏洞【CVE-2023-4165】 一、产品简介二、漏洞概述三、影响范围四、复现环境POC小龙POC检测工具: 五、修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损…

PHP最简单自定义自己的框架实现像TP链式sql语句(六)

1、实现效果&#xff0c;链式sql语句封装 order、where、group、limit等封装 2、数据表构造函数入参&#xff0c;ModelBase.php public $table NULL; public function __construct($table){$this->table$table;if(!$this->table){die("no table" );}$this-&…

C语言----输入scanf和输出printf详解

C语言编程中&#xff0c;输入输出是基本操作&#xff0c;printf和scanf并不是C语言中的唯一的输入输出选择&#xff0c;对于输入有scanf()、getchar()、getche()、getch()、gets()&#xff1b;对于输出有printf()、puts()、putchar()&#xff0c;他们各有自己的使用场景&#x…

C语言案例 阶乘求和-12

题目&#xff1a;求1 2&#xff01;3&#xff01; … 20&#xff01;的和。 程序分析 阶乘相关原理&#xff1a;一个正整数的阶乘是所有小于及等于该数的正整数的积&#xff0c;并且0的阶乘为1。自然数n的阶乘写作n!&#xff0c;任何大于1的自然数n阶乘表示方法&#xff1a;…

StarRocks入门部署

目录 一、StarRocks整体介绍 1.1、系统架构图&#xff1a; 1.2、FE相关 1.3、BE相关 1.4、数据管理特性 二、简单部署 2.1、部署前准备 2.2、手动部署 2.2.1、部署Leader FE节点 2.2.2、部署BE节点 2.2.3、关联FE、BE&#xff0c;搭建StarRocks集群 2.2.4、给root设…

【深度学习】日常笔记16

可以将pd.DataFrame数据结构理解为类似于Excel中的表格。pd.DataFrame是pandas库提供的一个二维数据结构&#xff0c;用于存储和操作具有行和列的数据。它类似于Excel中的工作表&#xff0c;其中每一列可以是不同的数据类型&#xff08;例如整数、浮点数、字符串等&#xff09;…

接口防护电路

一、接口电路是电路中与用户或者外界媒介进行交互的部分&#xff0c;是内部核心敏感电路和外部设备进行信息交互的桥梁。接口电路一般分为输入接口电路和输出接口电路两种。接口电路的防护设计就是为了隔离外部危险的信号&#xff0c;防止外部干扰信息进入系统内部核心敏感电路…

Linux系统USB转串口芯片 GPIO使用教程

一、简介 WCH的多款USB转单路/多路异步串口芯片&#xff0c;除串口接口以外&#xff0c;还提供独立的GPIO接口&#xff0c;各GPIO引脚支持独立的输出输入&#xff0c;GPIO功能的使用需要与计算机端厂商驱动程序和应用软件配合使用。各芯片的默认GPIO引脚状态有所区别&#xff…

Redis——常见数据结构与单线程模型

Redis中的数据结构 Redis中所有的数据都是基于key&#xff0c;value实现的&#xff0c;这里的数据结构指的是value有不同的类型。 当前版本Redis支持10种数据类型&#xff0c;下面介绍常用的五种数据类型 底层编码 Redis在实现上述数据结构时&#xff0c;会在源码有特定的…

RCNA——单臂路由

一&#xff0c;实验背景 之前的VLAN实现的很多都是相同部门互相访问&#xff0c;不同部门无法访问。不过这次整来了一个路由器&#xff0c;领导说大部分的部门虽说有保密信息需要互相隔离&#xff0c;但是这些部门和其它部门也应该互相连通以方便工作交流。因此要配置新的环境&…

2023-08-11 LeetCode每日一题(矩阵对角线元素的和)

2023-08-11每日一题 一、题目编号 1572. 矩阵对角线元素的和二、题目链接 点击跳转到题目位置 三、题目描述 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&#xff1…

linux安装ftp

一、安装 参考博客 https://blog.csdn.net/dafeigecsdn/article/details/126518069 rpm -qa |grep vsftpd # 查看是否安装ftp yum -y install vsftpd # 安装vsftpuseradd -d /home/lanren312 lanren312 # 指定在/home目录下创建用户 passwd lanren312 # 给用户设置密码 # 输…