Kotlin基本语法和使用
Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性。
Kotlin是使用Java开发者的思维被创建的,Intellij作为它主要的开发IDE。对于 Android开发者,有两个有趣的特点:
对Java开发者来说,Kotlin是非常直觉化的,并且非常容易学习。语言的大部 分内容都是与我们知道的非常相似,所以能迅速地掌 握它。
AndroidStudio作为目前最流行的Android开发工具,能够非常完美地理解、编译运行Kotlin代码。AndroidStudio 3.0之后已经完美支持kotlin
1.下面是AndroidStudio的配置
1.1 在Project对应的build.gradle文件中添加如下代码:
ext.kotlin_version = '1.1.2-4' //kotlin版本号
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
1.2 在module对应的build.gradle文件 中添加代码::
添加插件 apply plugin: 'kotlin-android'
添加依赖库 compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
重新build project就可以使用kotlin了。
2.下面说下kotlin的基本语法(借鉴了Kotlin的官网文档)
基本类型Basic Types
2.1 Number类型
定义变量
val a: Int = 10000
val boxedA: Int? = a
val b: Byte = 1
每个Number类型的变量支持如下方法进行转换
如:val i: Int = b.toInt()
2.2 Operations
如 val x = (1 shl 2) and 0x000FF000
2.3 Characters
字符型 定义如:val c: Char = 'C'
2.4 Booleans
布尔类型 定义如:val b: Boolean = false;
2.5 Arrays
数组类型 定义如:val x: IntArray = intArrayOf(1, 2, 3)
2.6 Strings
字符串类型 定义如:val s = "Hello, world"
3.基本语法
3.1 if语句
3.2 when语句(替代了java里的switch)
3.3 for循环语句
循环遍历集合collection里面的数据 并输出
3.4 while 和 do...while语句和java类似
4. 方法的定义
格式如:fun 方法名(参数名 :参数类型):返回值类型{
}
比如:
我们还可以给参数设置默认值 如:
fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size()) { ... }
5. 类的定义
格式如:class 类名{
}
在Kotlin中,一个类有一个primary constructor,一个或多个secondary constructors。primary constructor 属于类头部分,它在类名之后。
如果primary constructor没有任何注解或者指示符,constructor关键字可以被省略。
相反,如果primary constructory有注解或者可见的指示符,constructor是必须的。
primary constructor不能包含任何的代码,初始代码可以放在初始块中,初始化代码块以init关键字开头。
需要注意的是,在主构造函数里,可以直接用这些参数变量赋值给类的属性,或者用构造代码块来实现初始化。
Secondary Constructors
除了primary constructory,还有secondary constructors,同样也是constructor开头,位于类体中。
值得说明的是,如果primary constructory和secondary constructors同时存在,每个secondary constructor需要委托到primary constructor中去,或者间接通过另一个secondary constructors来委托。使用方法就是使用 this,表示委托到本类的另一个构造函数中。
如果非抽象的类没有声明任何的构造函数,它默认继承一个没有任何参数的公有构造器,这个跟Java中的默认构造器类似。如果希望它继承的是一个私有的构造器,就需要显示的指明。
创建类的对象实例我们可以这么实现
val invoice = Invoice()
val customer = Customer("帅气的码农")
6. 类的继承
用“:”冒号实现类的继承
定义一个父类 Person
open class Person(age: Int) //open关键字跟Java中的final是相反
子类继承
class Child(age: Int) : Person(age)
如果父类没有primary constructor,子类的每个secondary constructor在右边使用super来对它进行初始化。
class Child : Person {
constructor(ctx: Context) : super(ctx) { }
constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) { }
}
7. 方法重写
重写成员函数
对于可以重写的函数,都需要显示的指明,使用的是open关键字。如果没有,在子类中声明跟父类相同的方法是非法的。
open class Person {
open fun v() {}
fun v() {}
}
class Child() : Base() {
override fun v() {}
}
在子类中被标记为override的成员函数本身也是可以被重新的,也就是open的,如果希望它禁止被重写,需要使用final关键字。
重写规则
如果一个类继承自多个类,并且它的这些父类都有同一个可以重写的函数,那么这个类必须重写这个函数并且提供它自己的实现,另外在子类中指示父类的方法是super<A>
,A为父类类名,这样就可以指示不同的父类 了。
8. 抽象类
抽象类
跟Java一样,使用abstract关键字。
9. Companion Objects
Kotlin 移除了 static 的概念。通常用 companion object 来实现类似功能。
我们在 Activity 定义一个静态类型的 string,名叫TAG,和一个启动 Activity 的静态方法:
我们用kotlin可以这么写:
Kotlin基本语法和使用相关推荐
- kotlin常用语法扫盲及开发注意点,勿错失(持续更新)
kotlin常用语法扫盲及开发注意点,勿错失(持续更新) 文章目录 kotlin常用语法扫盲及开发注意点,勿错失(持续更新) 单句表达式 可以直接 用 = 省略 大括号 ::双冒号作用 map,lis ...
- Kotlin 特性 语法糖 优势 扩展 高阶 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- java文件的后缀.kt_移动端Kotlin 基础语法.kt 为后缀
Kotlin 基础语法 Kotlin 文件以 .kt 为后缀. 包声明 代码文件的开头一般为包的声明: package com.runoob.main import java.util.* fun t ...
- Kotlin(三) 语法糖
在上篇函数中,我们知道了如何定义函数,那么现在定义个函数,取两个数中比较大的数: fun getMaxNum(a : Int,b : Int) : Int { return max(a ...
- Kotlin基础语法(上)
文章目录 Kotlin基础语法(下) Kotlin基础语法(上) 输出Hello world!!! 变量与输出 kotlin常见数据类型 变量的取值范围 kotlin函数 kotlin布尔类型 kot ...
- Android kotlin基础语法
1.继承类和实现接口 继承类是冒号连接,java是extends连接.实现接口是逗号连接,java是implements连接 class MainActivity : AppCompatActivit ...
- Kotlin基础语法学习类和对象(一)
类定义 Kotlin 类可以包含:构造函数和初始化代码块.函数.属性.内部类.对象声明. Kotlin 中使用关键字 class 声明类,后面紧跟类名: class Runoob { // 类名为 R ...
- kotlin基本语法
函数 表达式:fun 方法名(参数名1: 数据类型, 参数名2: 数据类型): 返回值数据类型{ } 普通用法 fun test(a: Int): String {return "" ...
- Kotlin 基础语法(《第一行代码(第三版)》第二章读书笔记)
资源来自<第一行代码>(第三版)第二章 网络试读: https://www.ituring.com.cn/book/tupubarticle/30209 以下为笔记 转存失败重新上传取消正 ...
最新文章
- wget 命令用法详解
- 利用TLD2131组成LED矩阵显示实验电路板
- MySQL 数据库sql语句用关键字作为where条件进行筛选实例演示,mysql建表、查询字段为关键字解决方法
- C#:导入Excel通用类(CSV格式)
- 应用分类练手项目计划
- ABAP和Java SpringBoot的单元测试
- python从random生成列表_详解Python利用random生成一个列表内的随机数
- sorl6.0+jetty+mysql搭建solr服务
- vs2013 git 使用总结
- [mount]linux 挂载时 mount: wrong fs type, bad option, bad superblock on /dev/sdb
- php 判断两个数组对象是否相等_PHP是世界上最好的语言
- 自考那些事儿(八):计算机网络原理(原理篇)之网络各层
- 仿土豆网显示隐藏遮罩案例(HTML、CSS)
- 新特性AAtitti css3 新特性attilax总结titti css
- oracle(除数不能为0)
- Git与Github入门(一)
- Linux 设备模型基本概念 (一)
- NoSQL在腾讯海量数据中的应用与实践
- Word插入的表格如何拆分单元格
- javascript实现电话号码验证
热门文章
- 【C++】C++命名空间重定向
- java注解返回不同消息,Spring MVC Controller中的一个读入和返回都是JSON的方法如何获取javax.validation注解的异常信息...
- ganglia 监控mysql_Ganglia监控MySQL
- vuecli 编译后部署_基于vue-cli 打包时抽离项目相关配置文件详解
- adg oracle 架构_云化双活的架构演进,宁夏银行新核心搭载Oracle 19c投产上线
- mysql 8.0配置主从同步_MySQL8.0.19开启GTID主从同步CentOS8
- 根据传入坐标和图片URL地址对图片进行切图操作、将图片转化成Base64位码
- Tomcat下载安装与环境变量的配置
- iOS SwiftUI篇-3 排版布局layout
- 仅需6步,教你轻易撕掉app开发框架的神秘面纱(1):确定框架方案