Kotlin基础语法:变量、函数、类、枚举、控制流
一切都需要从基础学起!
前言:
在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基础语法:变量、函数、类、枚举、控制流的更多相关文章
- typescript基础语法--变量/函数/指令/类
博客地址 :https://www.cnblogs.com/sandraryan/ 要把ts文件引入到html中,首先要转码为js文件. 步骤: 终端运行: npm i -g typescript t ...
- JAVA基础语法:函数(方法)、类和对象(转载)
4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...
- openresty开发系列14--lua基础语法3函数
openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...
- python学习第五讲,python基础语法之函数语法,与Import导入模块.
目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...
- Kotlin基础语法学习
Kotline简介 Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性,比如,高阶函 ...
- Java基础语法(自定义类、ArrayList集合)
Java基础语法 今日内容介绍 u 自定义类 u ArrayList集合 第1章 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类 ...
- day133:2RenMJ:TypeScript的变量&函数&类&接口
目录 1.变量 2.函数 3.类 4.接口 1.变量 1.变量的声明 // 1.即指定数据类型 也指定值 var 变量名:类型 = 值; eg:var username:string = " ...
- python基础语法_9-0函数概念
http://www.runoob.com/python3/python3-function.html 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代 ...
- dll的概念 dll导出变量 函数 类
1. DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用. 静态链接库与动态链接库的区别: (1)静态链接 ...
- go基础语法-变量定义
1.基础定义 变量类型在变量名后 var a int var s string 2.定义并赋值 var a,b int = 1,2 var s string="abc" 3.类型推 ...
随机推荐
- Linux删除大于/小于固定大小的文件等
删除目录下大小为0的文件 rm -f 删除当前目录下面所有 test 文件夹下面的文件 find ./ -name "test" -type d -exec rm -rf {} ; ...
- Html-如何正确给table加边框
一般来说,给表格加边框都会出现不同的问题,以下是给表格加边框后展现比较好的方式 <style> table,table tr th, table tr td { border:1px so ...
- ADB 命令和monkey
一.概要 1.什么是adb? adb全称为Android Debug Bridge,就是起到调试桥的作用.顾名思义,adb就是一个debug工具. 2.adb工作原理 不是很理解?那就来看看它的工作原 ...
- appium的滑动
#coding = utf-8from appium import webdriverimport time'''1.手机类型2.版本3.手机的唯一标识 deviceName4.app 包名appPa ...
- 【剑指Offer】9、变态跳台阶
题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路: 当只有一级台阶时,f(1)=1:当有两级台阶时, ...
- ES6中的Symbol
---恢复内容开始--- Symbol 1.1 概述 保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突.这就是 ES6 引入Symbol的原因 在es6之前,JavaScript ...
- 进程映射、mmap(day05)
一.内存管理(续) 每个进程都有自己独立的4G的虚拟地址空间. 冯.诺伊曼体系结构 哈佛体系结构 section 代码段 只读数据段 栈段 举例说明 数据所属的段. 代码参见 memory.c 如何获 ...
- 51nod1085 背包问题【动态规划】
在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整数),与之相对应的价值为P1,P2--Pn(Pi为整数).求背包能够容纳的最大价值. Input 第1行,2个整数 ...
- 2.IntelliJ IDEA 下载破解(2017)
1.首先,我找到了 IntelliJ IDEA的官网:www.jetbrains.com 然后找到下载的地方,选择自己电脑所匹配的下载安装包,这里我们选择收费版的下载,因为免费版的功能并没有收费版的强 ...
- Spring Boot-全局异常处理(八)
SpringBoot默认异常默认处理机制 Spring boot错误异常时通过BasicErrorController来处理的 通过判断是浏览器请求还是ajax请求响应页面或者json BasicEr ...