Kotlin一步一个脚印学习基础一

来源:互联网 发布:软件机器人 编辑:程序博客网 时间:2024/05/24 01:53

     ##为什么选择它?---1、Google官方指定    2、简洁、现代、安全     3、无缝兼容Java
     ##Basic:@1:IDE安装   @2:常量和变量、赋值、常量和变量的关系、代码注释   @3:整数型、浮点型、类型安全、布尔型、元组、可空类型。
     ##Operalor&Type:@1、String-字符串和字符   @2、Collection-数组、Map、集合:一次处理多个类型的元素  @3、控制流-根据逻辑条件控制程序运行流向。
     ##Function & Lambda:@1、函数    @2、Lambda    @3、行内函数   @4、高级函数。
     ##OOP:@1、类和继承、属性、权限修饰符   @2、嵌套、数据类、封印类      @3、枚举类、对象声明和表达式。
   @4、错误处理    @5、类型检查。
     ##Interface:@1、接口实现   @2、接口中的属性    @3、接口冲突规则。
     ##Extensions:@1、函数拓展    @2、属性拓展   @3、伴生对象拓展     @4、拓展成员。
     ##Generics<泛型>:@1、型变    @2、类型投影   @3、泛型函数和泛型约束

1、开发工具:IntelliJ  IDEA   {JetBrains  
fun main(args: Array<String>) {
print("Hello World 世界你好!")
}
 
}

2、常量:
{
 
/**
 * 预期范围内恒定不变的量
 *
 * 定义:val 常量名(任意文字、长度不限)
 * 给常量一个值,叫"赋值",形式 val 常量名 = 值
 */
val pai 3.14159
val girl 1
val wages 7000
}

3、变量:
{
/**
 * 可主动变更或者预期内自动有规律或者无规律的量
 *
 * 比如:每天的清醒时间、个人前途。。。。
 */

//空调开机时间
var airConditionerOpenTime 5
}

4、整数型:
{
/**
 * 值的类型
 * 3这样的整数,在Kotlin中称为Int类型的值
 * 形式:var 变量名 : Int = 3
 * 由于Kotlin有类型推断,类型可以省略不写
 */

//var run : Int = 5
fun main(args: Array<String>) {
    var run = 5
    run = 6
    print("每天跑${run}公里")
}
}

5、浮点型
{
/**
 * 浮点型(小数)
 * Kotlin 中默认的浮点型是Double(双精度)
 */

fun main(args: Array<String>) {
    val pi = 3.14159267532
    print("圆周率${pi}")
}
}

6、类型安全
{
/**
 * 类型安全:变量一旦定义,其类型不可更改。
 * 即:不能给变量一个类型不同的值
 * 类型安全的JavaScript:TypeScript
 */

fun main(args: Array<String>) {
    var 电费 = 3.6
//    电费 = "5毛"   //类型安全,其类型不可更改。
    print("电费${电费}")
}
}

7、布尔型
{
/**
* 布尔型:Boolean
*/
fun main(args: Array<String>) {
var vip = false
print("布尔值${vip}")
}
}

8、元组(Tuple)
{
/**
* 元组(Tuple),给多个变量同时赋值,分二元(Pair)和三元(Triple)
*/
fun main(args: Array<String>) {
val (day,method,course) = Triple(3,"学会","Kotlin")//三元
println("${day}${method}${course}")

val (desc,toll) = Pair("学费",0)//二元
println("${day}${method}${course}${desc}${toll}元")

val peopleName = Pair("王","五")
println("此人的姓名为:${peopleName.first}${peopleName.second}")
}
}

9、可空类型
{
/**
* 可空类型(据说这个发明价值$1000000000)
*
* 代表变量可能没有值的情况
* 如:用户资料的选填部分,如住址/性别等辅助信息
* 形式:var 变量 : 类型?,无值则是null
*/

fun main(args: Array<String>) {
var addr: String? = "上海师范大学东校区" //类型后加?代表可空类型
var sex:Boolean? = null
if(addr != null){
println("您的地址是${addr}")
}
sex = false
if(sex !=null && sex){
println("您的男生")
}else{
println("您的女生")
}
}
}

10、可空类型
{
/**
* 可空类型(据说这个发明价值$1000000000)
*
* 代表变量可能没有值的情况
* 如:用户资料的选填部分,如住址/性别等辅助信息
* 形式:var 变量 : 类型?,无值则是null
*/

fun main(args: Array<String>) {
var addr: String? = "上海师范大学东校区" //类型后加?代表可空类型
var sex:Boolean? = null
if(addr != null){
println("您的地址是${addr}")
}
sex = false
if(sex !=null && sex){
println("您的男生")
}else{
println("您的女生")
}
}
}

11、基础操作符
{
/**
* 一个符号或单词,类似数学+、-、*、/,用于运算或者操作
* 同时操作对象的数目,被称之为几元操作符
*/
fun main(args: Array<String>) {
//操作一个目标,是一元操作符
var a = 3
var b = a
var c = -a
println("b:${b}--c:${c}")

//二元操作符操作2个目标,在2个目标之间,前后用空格分隔
var d = b + c
println("d:${d}")

//赋值操作符,用等号右边的值来更新左边变量的值
var e = d
println("e:${e}")

//数学操作符:+、-、*、/
println(3+4)
println(3-4)
println(3*4)
println(3/4)

//赋值与数学操作符的组合,比如+=、-=、*=、/=
var gdp = 10_000.0
var gdpGrowth = 6.7/100
gdp += gdp*gdpGrowth
println(gdp)

//比较操作符:>、>= 、<、<= 结果是true或false

//逻辑操作符:布尔值的组合,与<&&>/或<||>/非<!>
var havaComputer = true
var netAvaible = true
var watchVideo = false
if(havaComputer && netAvaible || watchVideo){
println("你学会Kotlin不成问题!")
}else{
println("无法学会Kotlin!")
}
var tt = true
var xx = !tt
println(xx)
}
}

12、集合类型-数组
{
/**
* 集合类型 Collection
* 同类型的值的组合,根据整体特性分:
* 1、有序可重复 - Array,索引从0开始(index,i)
* 2、无序不重复 - Set
* 3、无序可重复 - Map,但值有唯一的键(Key) 字典
* 区别:Array数组和List集合的区别,大小是否可变。
*/
fun main(args: Array<String>) {
//Array:Array<类型> 或 arrayof(元素1,元素2,...,元素n)
//#大小固定,元素类型不可变
var nollstations = arrayOf("嘉定北","徐家汇","南翔","桃浦新村","上海西站","罗山路","迪士尼","桃浦新村","徐家汇")
for (nollstation in nollstations) {
// println(nollstation)
}

//创建一个有默认值的数组,Array(计数,{默认值})
var nollstionNamePlaces = Array(20,{"临时站名"})
for (nollstionNamePlace in nollstionNamePlaces) {
// println(nollstionNamePlace)
}

//创建1到10数组:Array(10,{i ->i+1})
//i代表元素的索引值,从0开始。
var oneToTen = Array(10,{i->i+1})//通过索引和Lamda表达式给数组赋值,索引默认从0开始
for (i in oneToTen) {
// println("输出数组元素为:${i}")
}

//元素计数:count(),空否:isEmpty
/* println("数组的长度为:${oneToTen.count()}")
println("数组为空:${oneToTen.isEmpty()}")
println("数组不为空:${oneToTen.isNotEmpty()}")*/

//获取其中元素:数组名[索引],首元素:数组名.first,尾元素:数组名.last
/* println("获取数组的首元素:${oneToTen.first()}")
println("获取数组元素的尾元素:${oneToTen.last()}")
println("获取数组指定索引(3)位置的值:${oneToTen[3]}")*/
//获取前5个元素的快捷方法.component 1到5
// println("${oneToTen.component1()},${oneToTen.component2()}")

//获取筛选重复元素后的数组:distinct()或用.toSet()转为Set.
var nollStationsNoRepeat = nollstations.distinct()//唯一,去重
for (s in nollStationsNoRepeat) {
// println("通过distinct()去重后的数组元素为:${s}")
}
var nollStationsNoRepeatToSet = nollstations.toSet()//转换成Set集合,去重
for (s in nollStationsNoRepeatToSet) {
// println("通过toSet()转成集合去重后元素为:${s}")
}

//切割数组:sliceArray
val nollstationsInNanXiang = nollstations.sliceArray(2..3)//规定一个区间
for (s in nollstationsInNanXiang) {
// println("切割后的数组元素为:${s}")
}
//mutableList:MutableList<类型>或mutableListOf(元素1,元素2,....,元素n)
//注意:大小可变,类型不可变.
var nollNewsStations = mutableListOf("嘉定北","徐家汇","南翔","桃浦新村","上海西站","罗山路","迪士尼",
"桃浦新村","徐家汇","嘉定北","嘉定新城")
var newStations = arrayOf("徐家汇","嘉定北","嘉定新城")

//在末尾增加元素:add方法,添加另一个数组addAll方法
nollNewsStations.add("花桥")
nollNewsStations.addAll(newStations)
for (nollNewsStation in nollNewsStations.distinct()) {//去重
// println("添加数组元素后的结果为:${nollNewsStation}")
}

//移除元素remove,移除指定位置removeAt,移除一个数组
nollNewsStations.removeAll(newStations)//移除一个数组
nollNewsStations.removeAt(0) //根据下标移除元素
nollNewsStations.remove("花桥") //根据元素名移除元素

for (nollNewsStation in nollNewsStations) {
// println("移除元素后的数组集合为:${nollNewsStation}")
}
}
}

13、集合类型-Set
{
/**
* 集合类型 Set:无序不重复
* 主要方法:交差并补
*/
fun main(args: Array<String>) {

//Set<类型> 或 setOf(元素1,元素2,...,元素n)
//注意:大小固定,元素类型不可变

//地铁11号线主线:"迪士尼","徐家汇","桃浦新村","南翔","马陆","嘉定新城"
//嘉定区支线:"嘉定新城","嘉定西","嘉定北"
//江苏昆山支线:"嘉定新城","上海赛车场","安亭","花桥"
val mainLine = setOf("迪士尼","徐家汇","桃浦新村","南翔","马陆","嘉定新城")
val subkineJd = setOf("嘉定新城","嘉定西","嘉定北")
val sublineKs = setOf("嘉定新城","上海赛车场","安亭","花桥")

//元素计数:count(),空否:isEmpty()
// println("Set集合计数:${mainLine.count()}")

//检查是否包含某元素:contains,包含另一个Set:containsAll
/* println("Set集合是否包含某个元素:${mainLine.contains("徐家汇")}")
println("Set集合是否包含某个集合:${mainLine.containsAll(subkineJd)}")*/

//转化为数组:toTypedArray()
mainLine.toTypedArray()

//集合之间的运算:intersect<交>/subtract<差>/union<并>/minus<补>(补集的被操作对象无须是Set类型)
val interchage = mainLine.intersect(subkineJd)//取交:换乘站
println("换成站为:${interchage}")
println("取差集:${mainLine.subtract(subkineJd)}")//取差集:就是取交集剩下的部分
println("集合元素合并,行程所有站点:${mainLine.union(subkineJd).union(sublineKs)}")
println("获取集合元素的补集:${mainLine.minus(subkineJd)}")

//转换为可变:toMutableSet

//MutableSet<类型>或mutableSetOf(元素1,元素2,...,元素n)
//注意:大小可变,类型不可变.
val mutableMainline = mainLine.union(subkineJd).union(sublineKs).toMutableSet()//长度可变

//在末尾增加元素:add方法. 添加另一个集合:addAll方法
mutableMainline.add("光明路")
val newsLine = setOf("昌吉东路","上海汽车城")
mutableMainline.addAll(newsLine)

//移除元素:remove, 移除另一个集合:removeAll
mutableMainline.remove("昌吉东路")
mutableMainline.removeAll(newsLine)
for (s in mutableMainline) {
println("最后的集合元素为:${s}")
}
}
}

14、集合类型-Map
{
/**
* 集合类型Map:无序可重复.类型于"字典"字典的概念
* 主要属性:keys (Set),values
* 主要方法:
*/
fun main(args: Array<String>) {

//mapOf<key,value>(pair(key,value),...)
//显示指定类型,可防止初始化值类型的错误
//机场:"PVG","浦东" "SHA","虹桥" "HGH","萧山"
val airports = mapOf<String,String>(Pair("PVG","浦东国际机场"),Pair("SHA","虹桥"), Pair("HGH","萧山"))//元组

//元素计数:size,空否:isEmpty()
println("Map集合的大小:${airports.size}是否为空${airports.isEmpty()}")

//获取某个key对应的value:get,getOrDefault
println("根据键key-PVG获取值:${airports.get("PVG")}")
println("根据键key获取值不存在返回默认值:${airports.getOrDefault("PVGs","送你去外太空")}")

//返回所有的key:keys,所有的value:values
for (key in airports.keys) {
println("打印Map集合所有ksy的值:${key}")
}
for (value in airports.values) {
println("打印Map集合所有values的值:${value}")
}
//转换为可变:toMutableMap
val airports2 = airports.toMutableMap()

//mutableMapOf<key,value>(Pair(key,value),...)

//添加或更新:下标方法 map变量名[key] = value
airports2["PVG"] = "上海市浦东新区浦东国际机场" //存在键值,则更新对应的value值
airports2["DLC"] = "大连市周水子机场" //不存在键,则新增一条数据
for (mutableEntry in airports2) {
// println("打印键值对:(${mutableEntry.key},${mutableEntry.value})")
}

//移除元素:remove
airports2.remove("PVG")
for (mutableEntry in airports2) {
println("移除元素后的集合为:(${mutableEntry.key},${mutableEntry.value})")
}
}
}




原创粉丝点击