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 nv() {}
}
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基础语法学习
Kotline简介 Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性,比如,高阶函 ...
- Kotlin 特性 语法糖 优势 扩展 高阶 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Kotlin基本语法笔记之函数、变量的定义及null检测
定义函数 fun sum(a: Int, b: Int): Int { return a + b } 该函数中两个参数的类型都是Int,返回类型是Int 也可以做如下简化 fun sum(a: Int ...
- Kotlin基本语法和使用技巧
基本语法 val value: String? = "HelloWorld" val name: String = getName() ?: return //如果是null就re ...
- Kotlin 基础语法
Kotlin 文件以 .kt 为后缀. 包声明 代码文件的开头一般为包的声明: package com.runoob.main import java.util.* fun test() {} cla ...
- Kotlin 基本语法
常量 val a: Int = 5 变量 var a: Int = 5 Any:匹配任何类型 ?:nullable,比如 a?.toString,如果 a 为 null 不会出错. 函数基本结构 fu ...
- Kotlin基本语法笔记3之定义类、继承及创建实例
定义类 class MyObject private constructor(name: String, age: Int) { private var name: String private va ...
- Kotlin基础语法:变量、函数、类、枚举、控制流
一切都需要从基础学起! 前言: 在Kotlin语言中,没有分号的概念了,也就是每一行代码,都不在需要用分号结束了 点击查看代码 定义 常量:val --相当于java当中的final 变量:var 关 ...
- Kotlin基本语法笔记2之类型检测及自动类型转换、循环
类型检测及自动类型转换 is运算符用于检测一个表达式是否为某类型的一个实例检测出为某类型后,检测后的分支中可以直接当作该类型使用,无需显示转换 fun getStringLength(obj: Any ...
随机推荐
- hammer的初始化及移动端各种滑动
前言:本人对hammer了解不是很多,早做项目时遇到了手机端的一些滑动事件,特此分析下hammer的某些属性. hammer.js是一款开源的移动端脚本框架,他可以完美的实现在移端开发的大多数事件,如 ...
- poj3067 Japan 树状数组求逆序对
题目链接:http://poj.org/problem?id=3067 题目就是让我们求连线后交点的个数 很容易想到将左端点从小到大排序,如果左端点相同则右端点从小到大排序 那么答案即为逆序对的个数 ...
- wifi驱动总结(1)
一.wifi平台设备驱动注册过程Path:Rtw_android.c (rk3399\kernel\drivers\net\wireless\rockchip_wlan\rtl8723au\os_de ...
- iOS Regex匹配关键字并修改颜色
引入第三方框架RegexKitLite /** * 根据传入的文字返回一个符合规则的富文本 * * @param title 匹配的文字 * * @return 创建的富文本 */ -(NSAttri ...
- java虚拟机学习-JVM调优总结(5)
数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身, ...
- MySql学习笔记(五) —— 存储过程
存储过程是MySql 5支持的特性,它是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了,简而言之 ...
- AtomicInteger的使用
JDK API 1.7相关介绍 可以用原子方式更新的 int 值.有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范.AtomicInteger 可用在应用 ...
- 用border或者div制作三角形等图形
一般情况下, 我们设置盒子的宽高度, 及上下左右边框, 具体代码如下: 通过上述代码,div的具体样式如下: 现在在上面基础上, 我们把div的宽高度都设为0时, 现在我们再次查看效果,如下图: 这时 ...
- js实现谷歌坐标转百度坐标
js实现谷歌坐标转百度坐标 谷歌坐标转百度坐标 实现算法如下(以js为例,其他语言调整就行): //$lat 维度:$lng 经度 function GCJTobaidu($lat, $lng){ ...
- 测评:华为最新移动应用/APP测试工具MobileTest
一.目前移动应用/App的测试痛点及可选方案 移动互联网市场进入下半场,同质化竞争激烈,平均获客成本增加.屏幕不适配.闪退.无响应.UI异常等兼容性问题严重影响用户体验,影响用户转化率和用户粘性.如何 ...