一切都需要从基础学起!

前言:

  在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. 小程序组件 Vant Weapp 安装

    文件夹的名称必须是英文 第一步:npm init -y 第二步:npm i vant-weapp -S --production

  2. PAT_A1134#Vertex Cover

    Source: PAT A1134 Vertex Cover (25 分) Description: A vertex cover of a graph is a set of vertices su ...

  3. PAT_A1132#Cut Integer

    Source: PAT A1132 Cut Integer (20 分) Description: Cutting an integer means to cut a K digits lone in ...

  4. TensorFlow的序列模型代码解释(RNN、LSTM)---笔记(16)

    1.学习单步的RNN:RNNCell.BasicRNNCell.BasicLSTMCell.LSTMCell.GRUCell (1)RNNCell 如果要学习TensorFlow中的RNN,第一站应该 ...

  5. Laravel 5

    遍历数组@foreach($brand as $v) <a href='/brandss/seeshops?id={{$v->id}}'><img src="/pub ...

  6. 优化 RequireJS 项目(合并与压缩) 【已翻译100%】

    英文原文:Optimize (Concatenate and Minify) RequireJS Projects 标签: RequireJS Node.js 参与翻译 (1人) : 裴宝亮 本文将演 ...

  7. lucene_03_索引的增删改查

    lucene索引的添加见 http://www.cnblogs.com/getchen/p/8615276.html 入门代码. 公共代码 public <T extends Query> ...

  8. daemon not running; starting now at tcp:5037 adb: CreateFileW 'nul' failed: 系统找不到指定的文件

    1. INFO - roid.tools.idea.adb.AdbService - Initializing adb using: C:\Users\Administrator\AppData\Lo ...

  9. eclipse中 使用maven搭建ssh项目 思路复习(含有pom.xml)

    首先在web.xml中配置监听器 在服务器启动的时候 进行bean对象的创建(只会创建单例对象 dao service   多例对象action可不会创建  每个多例对象是不同的 创建了有什么意义呢 ...

  10. SSL延迟

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