Kotlin学习(一)

Kotlin学习(一)

1.使用IDEA构建Kotlin项目

在这里插入图片描述

新建工程即可

我这里选择的Build System是IntelliJ,虽然我没用过但是这是Kotlin基础学习应该不会用到其他依赖

2.Hello World

package com.simonfun main(args:Array<String>){println("hello kotlin");
}

3.常量与变量

package com.simon
//变量声明与使用
fun main(args:Array<String>){//变量var name = "张三"name = "李四"println(name)//    name = 8 //8是一个数字不能放到String里面println(name)
}

常见的数据类型:

Byte 2的8次方

Short 2的16次方

Int 2的32次方

Long 2的64次方

Float 小数点后6位

Double 小数点后15-16位

String 字符串

Boolean 布尔型

4.类型推断

package com.simonfun main(args:Array<String>){var i = 18//i = 9999999999//The integer literal does not conform to the expected type Int//我们发现我们的i自动编译为Int类型var j = 9999999999//我们的j可以存储自然那么编译为Long类型var name:String = "simon"//我们的name就是存放一个字符串的空间//我们根据等号后面来推断数据类型val num = "123"//num是常量所以说是只读}

根据等号后面来自动推断类型

所以我们的var name:String = “simon” 可以写为 var name = “simon”

5.基础类型大小

package com.simonfun main(args:Array<String>) {val  aByte:Byte = Byte.MAX_VALUE;val  bByte:Byte = Byte.MIN_VALUE;println(aByte)println(bByte)val  aLong:Long = Long.MAX_VALUE;val  bLong:Long = Long.MIN_VALUE;println(aLong)println(bLong)
}

6.布尔值类型

package com.simonfun main(args:Array<String>) {var num1 = 1var num2 = 4println(num1<num2)var num3 = Math.sqrt(5.0) - Math.sqrt(4.0)var num4 = Math.sqrt(4.0) - Math.sqrt(3.0)println(num3<num4)
}

7.函数

package com.simon
//1.函数基本定义格式
fun sum(a:Int,b:Int):Int{//函数返回值Intreturn a + b
}fun main(args: Array<String>) {//2.可以用表达式作为函数体//表达式不是public就可以省略返回值类型fun sum(a: Int,b: Int) = a+b}
// 3.public 方法表达式就要明确写出
public fun sumPub(a:Int , b: Int):Int = a+b
//4.无返回值可以省略
fun printZzz(){println("printZzz")
}
public fun printXxx(){println("printXxx")
}
//5.可变长参数列表
fun vars (vararg v:Int){for (vt in v) {println(vt)}
}
//6.lambda表达式
val sumLambda: (Int,Int)->Int = {x,y -> x+y}

8.字符串模板

package com.simonfun main(args: Array<String>) {//$ 表示一个变量名或者变量值var a = 1var s1 = "a is $a"println(s1)a = 2//${}是一个变量的方法返回值var s2 = "${s1.replace("is","was")},but now a = $a";println(s2)
}

总结:

$ 可以是变量值

${} 可以是变量的方法返回值

9.NULL检查

package com.simonfun main(args: Array<String>) {//类型后面加?表示可以为空var age:Int? = null
//    var age1:Int = null//抛出空指针异常
//    val ages = age!!.toInt()//不作处理返回nullvar ages1 = age?.toInt()//age为空返回-1var ages2 = age?.toInt() ?:-1//    println(ages)println(ages1)println(ages2)println(parseInt("zzz"))println(parseInt("123"))
}
//当一个引用可能是null时,对应的类型声明必须明确地标记为可为null
fun parseInt(str:String):Int?{return str.toIntOrNull();
}//上面这段代码就是我们的age这个变量是int类型但是我们赋值为null,因为加了问号说明可以为null
//    var age1:Int = null 是抛出空指针,如果是数字就不会抛出
//    var ages1 = age?.toInt() 这个就自然输出null了不处理
//    var ages2 = age?.toInt() ?:-1 这个就处理了如果是null就赋值-1

10类型检测以及自动类型转换

package com.simonfun main(args: Array<String>) {println(getStringLength(123))println(getStringLength("123"))
}fun getStringLength(obj: Any):Int?{
//    if (obj is String){
//        return obj.length
//    }
//    return nullif (obj !is String){return null}//在这个分支中,obj会自动转换为String类型return obj.length
}

is and !is 类型判断

11.区间

package com.simonfun main(args: Array<String>) {for (i in 1..4) print(i)//什么都不输出,所以得知默认是升序的for (i in 4..1) print(i)for (i in 1..10){print(i)}println()//使用step指定步长for(i in 1..4 step 2){print(i)![在这里插入图片描述](https://img-blog.csdnimg.cn/73dd3e82979a433291798d7c797b1a22.png#pic_center)}println()for(i in 4 downTo  1 step 2){print(i)}println()//使用until函数排除结束元素for(i in 1 until 10){print(i)}
}

区间 in xx…xx

默认升序,downTo降序

并且step指定步长

并且until排除结尾

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

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

相关文章

[qemu逃逸] DefconQuals2018-EC3

前言 一道简单的套壳堆题.原本题目环境为 ubu16, 我这里使用的是 ubu18 设备逆向 qemu-system-x86_64 只开了 Canary 和 NX 保护. 比较简单, 主要逻辑在 mmio_write 里面, 其实现了一个菜单堆, 具有增删改的功能: 但是在释放堆块时并没有置空, 所以这里存在 UAF. 而程序还直…

FlinkCDC数据实时同步Mysql到ES

考大家一个问题&#xff0c;如果想要把数据库的数据同步到别的地方,比如es,mongodb,大家会采用哪些方案呢&#xff1f; ::: 定时扫描同步&#xff1f; 实时日志同步? 定时同步是一个很好的方案&#xff0c;比较简单&#xff0c;但是如果对实时要求比较高的话&#xff0c;定…

URAT串口通信协议

UART是异步串行全双工总线&#xff0c;面向设备和设备之间的连接 配置相关内容 1、串口为串行通讯方式&#xff0c;代表一个时钟周期&#xff0c;只可以收发一位数据 2、115200代表什么&#xff0c;以及115200单位 单位&#xff1a;bps(比特率、二进制/秒) 115200代表&#…

我的创作纪念日——365天

机缘 最开始我写博客没有什么特别的原因&#xff0c;主要是因为以下几点&#xff1a; 练习自己的语言组织能力 记录自己学习生活中学到的知识 主要还是想找一个好的保存 Markdown 笔记的平台。 最终我选择了 CSDN&#xff0c;一来是因为 CSDN 对 Markdown 语法的支持较为全面…

Rust开发——切片(slice)类型

1、什么是切片 在 Rust 中&#xff0c;切片&#xff08;slice&#xff09;是一种基本类型和序列类型。在 Rust 官方文档中&#xff0c;切片被定义为“对连续序列的动态大小视图”。 但在rust的Github 源码中切片被定义如下&#xff1a; 切片是对一块内存的视图&#xff0c;表…

【小沐学GIS】电子海图OpenCPN源代码编译和运行(VS2017 + Win10)

1、简介 免费的开源海图仪和船用GPS导航软件 https://opencpn.org/ 1.1 OpenCPN概述 OpenCPN是一款自由软件&#xff08;GPLv2&#xff09;&#xff0c;用于创建简洁的海图绘图仪和导航软件&#xff0c;可以在航行过程中使用或者作为计划工具。OpenCPN提供大量免费海图下载&a…

Linux系统编程 day02 vim、gcc、库的制作与使用

Linux系统编程 day02 vim、gcc、库的制作与使用 01. vim0101. 命令模式下的操作0102. 切换到文本输入模式0103. 末行模式下的操作0104. vim的配置文件 02. gcc03. 库的制作与使用0301. 静态库的制作与使用0302. 动态库(共享库)的制作与使用 01. vim vim是一个编辑器&#xff0…

ESP32 Arduino实战协议篇-搭建独立的 Web 服务器

在此项目中,您将创建一个带有 ESP32 的独立 Web 服务器,该服务器使用 Arduino IDE 编程环境控制输出(两个 LED)。Web 服务器是移动响应的,可以使用本地网络上的任何浏览器设备进行访问。我们将向您展示如何创建 Web 服务器以及代码如何逐步工作。 项目概况 在直接进入项目…

Linux基础全整理 从入门到放弃,一些想说的话

阅读目录 断更后一些想说的话用户useraddpasswdpasswd文件详解 chageusermoduserdelshadow 文件格式切换用户 用户组groupaddgroup文件格式groupmodgroupdel登陆远程机器 磁盘RAIDraid0&#xff08;安装系统&#xff09;raid1&#xff08;存放数据&#xff09;raid 5&#xff0…

Linux - 进一步理解 文件系统 - inode - 机械硬盘

详谈机械磁盘 在上一篇博客当中&#xff0c;已经对 用户级缓冲区 和 系统缓冲区 的区别&#xff0c;和 初步认识 C 库函数 封装的 文件接口这些做了阐述。具体可以参考下述博客&#xff1a; Linux - 用户级缓冲区和系统缓冲区 - 初步理解Linux当中文件系统-CSDN博客 本博客将…

PWM实验

PWM相关概念 PWM:脉冲宽度调制定时器 脉冲&#xff1a;方波信号&#xff0c;高低电平变化产生方波 周期&#xff1a;高低电平变化所需要时间 频率&#xff1a;1s钟可以产生方波个数 占空比&#xff1a;在一个方波内&#xff0c;高电平占用的百分比 宽度调制&#xff1a;占…

java--拼图游戏

1、了解拼图游戏基本功能&#xff1a; 拼图游戏内容由若干小图像块组成的&#xff0c;通过鼠标点击图像块上下左右移动&#xff0c;完成图像的拼凑。 2、拼图游戏交互界面设计与开发&#xff1a; 通过创建窗体类、菜单、中间面板和左右面板完成设计拼图的交互界面 &#xff…