一切都需要从基础学起!

前言:

  在Kotlin语言中,没有分号的概念了,也就是每一行代码,都不在需要用分号结束了

  点击查看代码

定义

  常量:val --相当于java当中的final

  变量:var

  关键字:如枚举关键字enum,在 ‘enum class 类名’ 中,enum是关键字,但是如果 ‘val enum = 1’中,enum就不是关键字了

  类型:以冒号:隔开在后面,也可以省略直接赋值,类型后带问号?表示可为空类型(默认空安全)

  是否为null参数定义:如x: String?表示x变量是String类型,且该变量可以为null

  数据打印:${x},其中x为要打印的变量,如 

//顶层变量:只有var、val声明方式,如果没有指定变量的类型时,
// 在编译时由编译器自动根据赋予这个变量的值来推断这个变量的类型
val i = "1" //相当于java中 final ,值不可以更改的
var j = 2 //变量
var z: String = "这是一个String类型数据"
println("i = ${i},j = ${j},z = ${z},z.length = ${z.length}")
输出结果:
  i = 1,j = 2,z = 这是一个String类型数据,z.length = 14

函数:

//顶层函数,类似java的main函数,其实也就是java的main函数,程序的入口(AS中输入main可自动补全)
fun main(args: Array<String>) {
println("这个是Kotlin的main函数")
}
PS:默认作用域是public
右键该文件运行,如同java文件启动main一样
//自定义函数
fun test(): String {
return "这个是Kotlin函数的return内容"
}
PS:在函数形参后面通过 :数据类型,如 : String 指定返回类型,如果没有声明返回的类型,那么默认类型是:Unit,
fun test1() = "声明函数后直接返回相应结果"
PS:可以声明一个函数并直接返回结果 fun test2(x: Int, y: String){
  println("x = ${x},y = ${y}")
}
PS:声明指定函数接收的参数
fun test3(x: Int, y: Int) = if (x > y) {
x
} else {
y
}
PS:可以把函数主体换成表达式主体,把if当做是有返回值的表达式,在该函数被调用时,就会执行该if表达式并返回结果,并且这种 = if 的表达式可以使函数忽略返回类型
fun main(args: Array<String>) {
  println("这个是Kotlin的main函数")
  println(test())
  println(test1())
  test2(7, "这个是函数参数")
  println("返回结果:${test3(2, 4)}")
}
输出结果:
  这个是Kotlin的main函数
  这个是Kotlin函数的return内容
  声明函数后直接返回相应结果
  x = 7,y = 这个是函数参数
  返回结果:4

类定义 

//简单的类定义
class Person {
}
PS:与java不同的是Kotlin可以在类名后面加上(val name: String?),表示给类定义属性(给Person类创建了需要带参数类型的构造方法,并且表示该参数可以为null),代码如下: class Person(val name: String?) {
}
PS:如果类不需要添加更多的方法,那么花括号{}也是可以不要的, 定义完整类如下:
class Person(var name: String?) {
//val 只有get获取器
val gender: String
get() = "男" var stature: Int = 0
get() = field
set(value) {
field = value
} var isMarried: Boolean = true
get() = field
set(isMarried) {
//field 就表示isMarried,需要给变量指定一个默认值
field = isMarried
}
}
PS:通过验证,获取器 只能这样写 get() = field ,否则会报如下异常(欢迎各位一起验证该获取器的写法,然后告知)

Exception in thread "main" java.lang.StackOverflowError
var person = Person("itsdf07")
person.stature = 177
println("name = ${person.name}, gender = ${person.gender}, stature = ${person.stature}, isMarried = ${person.isMarried}")
输出结果:
name = itsdf07, gender = 男, stature = 177, isMarried = true 枚举类
//enum 软关键字,为什么是软关键字?只有跟在class前面才是关键字,否则不是关键字
enum class Color(val r: Int, val g: Int, val b: Int) {
RED(255, 0, 0),
BLUE(0, 0, 255),
YELLOW(255, 255, 0)
}

控制流

when语句

fun test4() {
//Kotlin中是没有switch关键字,而是使用when
//when带参数
when (Color.BLUE) {
//枚举常量 -> 相当于java中的case xxx: break;
Color.RED -> println("红色")
//如果枚举变量后面没有带 -> ,那么就类似java中的case没有写break
Color.BLUE,
Color.YELLOW -> println("蓝色或者黄色")
} //when 不带参数,就可以在when里面写任意表达式,比如以下中类似java中的if(){...} else if(){...}写法
when {
test3(2, 4) == 2 -> println("test3(2,4) = ${test3(2, 4)}")
test3(2, 4) == 4 -> println("test3(2,4) = ${test3(2, 4)}")
test3(2, 4) == 0 -> println("test3(2,4) = ${test3(2, 4)}")
}   println("test5(2, 4) = ${test5(2, 4)}") }
fun test5(x: Int, y: Int) = when {
x == y -> 0
else -> {
when {
x > y -> x
else -> y
}
}
}
调用test4()
输出结果:

  蓝色或者黄色
  test3(2,4) = 4
  test5(2, 4) = 4

for循环,中断和继续标签

  在Kotlin中任何表达式都可以用label{:.keyword } (标签)来标记。label的格式是被'@'标识符标记,例如:aso@, dfsu@都是有效的label:

  如果有多重循环,带标签的break会跳转出标签所指示的那一个循环。带标签的continue会跳转到标签所指向的那个循环,进入该循环的下一次循环。

fun test6() {
//6次循环,打印出0、1、2、3、4、5
val rang: IntRange = 0..5
//简单的全部循环
for (i in rang) {
println("i = ${i}")
}
println("rang 0..5 全部循环完成了") //循环过程中处理事件,如跳出 break
for (i in rang) {
println("i = ${i}")
if (i == 2) {
println("rang 0..5 跳出 i= ${i} 循环完成了")
break
}
}
//循环过程中处理事件,如跳过 continue
for (i in rang) {
if (i == 2) {
println("rang 0..5 跳过 i= ${i} 循环完成了")
continue
}
println("i = ${i}")
} //Kotlin也是支持goto的
for (i in rang) {
aso@for (j in rang){//执行到i== 3的时候,跳出该次循环
if (i == 3) {
println("rang 0..5 跳过 i= ${i} 循环完成了")
break@aso
}
println("i = ${i}, j = ${j}")
} }
}

  

Kotlin基础语法:变量、函数、类、枚举、控制流的更多相关文章

  1. typescript基础语法--变量/函数/指令/类

    博客地址 :https://www.cnblogs.com/sandraryan/ 要把ts文件引入到html中,首先要转码为js文件. 步骤: 终端运行: npm i -g typescript t ...

  2. JAVA基础语法:函数(方法)、类和对象(转载)

    4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...

  3. openresty开发系列14--lua基础语法3函数

    openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...

  4. python学习第五讲,python基础语法之函数语法,与Import导入模块.

    目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...

  5. Kotlin基础语法学习

    Kotline简介 Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性,比如,高阶函 ...

  6. Java基础语法(自定义类、ArrayList集合)

    Java基础语法 今日内容介绍 u 自定义类 u ArrayList集合 第1章 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类 ...

  7. day133:2RenMJ:TypeScript的变量&函数&类&接口

    目录 1.变量 2.函数 3.类 4.接口 1.变量 1.变量的声明 // 1.即指定数据类型 也指定值 var 变量名:类型 = 值; eg:var username:string = " ...

  8. python基础语法_9-0函数概念

    http://www.runoob.com/python3/python3-function.html 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代 ...

  9. dll的概念 dll导出变量 函数 类

    1. DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用. 静态链接库与动态链接库的区别:   (1)静态链接 ...

  10. go基础语法-变量定义

    1.基础定义 变量类型在变量名后 var a int var s string 2.定义并赋值 var a,b int = 1,2 var s string="abc" 3.类型推 ...

随机推荐

  1. python时间序列按频率生成日期

    有时候我们的数据是按某个频率收集的,比如每日.每月.每15分钟,那么我们怎么产生对应频率的索引呢?pandas中的date_range可用于生成指定长度的DatetimeIndex.我们先看一下怎么生 ...

  2. 【ACM】hdu_1092_A+BIV_201307261630

    A+B for Input-Output Practice (IV)Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/3276 ...

  3. SSL延迟

    原文链接 据说,Netscape公司当年设计SSL协议的时候,有人提过,将互联网所有链接都变成HTTPs开头的加密链接. 这个建议没有得到采纳,原因之一是HTTPs链接比不加密的HTTP链接慢很多.( ...

  4. ZEAL--可以查看所有软件API的软件

    windows平台上最强大的可以查看所有API的软件,从此再也不用去各个网站上扒了,而且有时还有Greate Wall 点我下载

  5. 洛谷—— P1097 统计数字

    https://www.luogu.org/problem/show?pid=1097 题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数 ...

  6. 关于Hanoi算法

    java经典算法——河内算法(Hanoi) 有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出 ...

  7. spring-logback

    <?xml version="1.0" encoding="UTF-8"?><!-- 说明: 1.日志级别及文件 日志记录采用分级记录,级别与 ...

  8. LINUX内核内存屏障

    =================                          LINUX内核内存屏障                          ================= By ...

  9. [Javascript] Highlights from IO18 Javascript new features

    Latest Javascript features, not supported by all broswers, but can use with babel. # try-catch-final ...

  10. android中常见的内存泄漏和解决的方法

    android中的内存溢出预计大多数人在写代码的时候都出现过,事实上突然认为工作一年和工作三年的差别是什么呢.事实上干的工作或许都一样,产品汪看到的结果也都一样,那差别就是速度和质量了. 写在前面的一 ...