当前位置: 首页 > 编程日记 > 正文

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

    val b: Byte 1

    每个Number类型的变量支持如下方法进行转换

    

如:val i: Int b.toInt()

   2.2 Operations

    如 val = (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 "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(ageInt) : 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可以这么写:


本文转自lzwxx 51CTO博客,原文链接:http://blog.51cto.com/13064681/1943440

相关文章:

java注解返回不同消息,Spring MVC Controller中的一个读入和返回都是JSON的方法如何获取javax.validation注解的异常信息...

Spring MVC Controller中的一个读入和返回都是JSON的方法怎么获取javax.validation注解的错误信息&#xff1f;本帖最后由 LonelyCoder2012 于 2014-03-14 03:16:27 编辑标题可能有点绕&#xff0c;看代码就明白了&#xff1a;这是我的User类&#xff1a;import org.hibernate.…

三摄正普及,四摄在路上?谷歌逆天AI算法,只做单摄虚化

作者| 琥珀出品| AI科技大本营想要提高拍照效果&#xff0c;想必对于多数手机厂商而言&#xff0c;给手机塞进更多的摄像头似乎成了当前主流做法&#xff0c;例如“普通摄像头景深摄像头”、“黑白彩色摄像头”、“广角长焦摄像头”……不过&#xff0c;偏偏有这么一家企业反其…

TBContact -- 导出ThunderBird邮件地址本

我写的一个导出ThunderBird邮件地址本的小工具&#xff0c;使用了多线程。其功能有&#xff1a;1 自动检测系统是否装有ThunderBird&#xff0c;并列出所有的地址本文件*.mab。2 可以手工指定一个或多个地址本文件。3 自动检测每个地址本文件里的联系人个数。4 导出每个地址本文…

Linux基础知识入门测试

记录于51CTO的测试题&#xff1a; 第 1 题 Linux中&#xff0c;默认的管理员帐户名称是 A. Administrator B. Admin C. root D. user 第 2 题 在Linux中&#xff0c;如果在文本模式下&#xff0c;可以通过下述的方法进入x window A. 执行startx B. 执行start …

jsp mysql 图片路径,请教JSP中怎么向MySql中存入和取出图片

当前位置:我的异常网 Java Web开发 请教JSP中怎么向MySql中存入和取出图片请教JSP中怎么向MySql中存入和取出图片www.myexceptions.net 网友分享于&#xff1a;2015-08-27 浏览&#xff1a;138次请问JSP中如何向MySql中存入和取出图片?1 直接把图片存入数据库2 把图片的…

开源 | IBM、哈佛共同研发:Seq2Seq模型可视化工具

作者 | Ben Dickson译者 | 刘旭坤编辑 | Jane出品 | AI科技大本营近年来随着深度学习和神经网络技术的发展&#xff0c;机器翻译也取得了长足的进步。神经网络结构越来越复杂&#xff0c;但我们始终无法解释内部发生了什么&#xff0c;“黑箱问题”一直困扰着我们。我们不清楚程…

h3c l2tp ***配置

远程用户-------internet-------F100 采用l2tp方式sysname XXXX //设备名称#l2tp enable //开启l2tp功能 #firewall packet-filter enablefirewall packet-filter default permit#undo connection-limit enableconnection-limit default den…

Blockchain与Big Data将碰撞出怎样的火花?

区块链技术热潮席卷全球&#xff0c;正在与各种新兴技术深入融合——大数据也不例外&#xff0c;卓有远见的企业已将区块链作为未来发展重点。数据开放的大势下&#xff0c;如何保护隐私与安全是大数据领域的难点与挑战。凭借可信与安全的特性&#xff0c;区块链令越来越多高价…

机器学习之开源库

机器学习库&#xff08;1&#xff09;scikit-learn [http://scikit-learn.org/] Python下做机器学习&#xff0c;首推scikit-learn。该项目文档齐全、讲解清晰&#xff0c;功能齐备&#xff0c;使用方便&#xff0c;而且社区活跃。 &#xff08;2&#xff09;Orange …

arduino跑python,尝试在我的Arduino和stu上执行Python3.7.2中的代码

提前谢谢你。在我会尽量简短。在我有一个ArduinoIDE&#xff0c;有一个串行端口&#xff0c;工作正常。我下载了python3.7.2、PySerial和VPython。全部安装完毕。在通过我的MacBook终端安装了PySerial。sudo easy_install pyserialPassword: Searching for pyserialBest match:…

揭开Windows XP 系统安全模式的密秘

经常使用电脑的人可能都听说过&#xff0c;当电脑出了故障时&#xff0c;Windows会提供一个名为“安全模式”的平台&#xff0c;在这里用户能解决很多问题--不管是硬件&#xff08;驱动&#xff09;还是软件的。然而你会使用这个安全模式么&#xff1f;今天我们就来带您认识一下…

matlab文档型数据导入,MATLAB-数据导入

MATLAB-数据导入在MATLAB中导入数据意味着从外部文件加载数据。 importdata函数允许加载不同格式的各种数据文件。它具有以下五种形式-Sr.No.Function & Description1A importdata(filename)Loads data into array A from the file denoted by filename.2A importdata(‘…

专访百度熊辉:有人转AI纯粹因为好找工作,这样的人不是我想要的

2018 年初&#xff0c;学术界的明星人物&#xff0c;美国罗格斯&#xff0d;新泽西州立大学教授、ACM 杰出科学家、长江学者熊辉加盟百度&#xff0c;担任百度商业智能实验室主任以及百度人才智库主任。 从计算机博士到商学院教授&#xff0c;再从学术圈到工业界&#xff0c;熊…

活下去,是一种信念 !

2008年5月12日14:28分以来&#xff0c;读着不想看到的文字和数据&#xff0c;看着不愿看见的图片和画面&#xff0c;已经成了我的主要生活内容。即便是艰难收拾好心情坐在电脑前的此刻&#xff0c;耳边回响的依然是那种撕心裂肺的痛哭和感天动地的呼喊&#xff0c;眼前浮现的依…

我的一个rsync的包装

我完成了一个基于rsync的文件同步方案&#xff0c;其实有人会问&#xff0c;直接用rsync命令不就可以了吗&#xff1f;其实不然&#xff0c;直接用这个命 令的话只能保证得到了同步的效果&#xff0c;审计信息得不到&#xff0c;然而审计信息很重要&#xff0c;比如哪个时间同步…

2018最后一战:25天编程PK赛!

作者 | Jane出品 | AI科技大本营2018 年余额已不足一个月&#xff01;是惊喜还是惊恐&#xff1f;这一年是充实有意义的一年&#xff0c;还是觉得略有失望&#xff1f;最后这三十天&#xff0c;我们还能学些什么&#xff1f;获得哪些成长&#xff1f;如何为 2019 年准备一个好的…

java 获取已有字体,java获取本机全部可用字体

java获取本机所有可用字体//just for fun,那个28个字母的函数满满都是恶心import java.awt.GraphicsEnvironment ;class Tester{public static void main(String args[]){GraphicsEnvironment ge GraphicsEnvironment.getLocalGraphicsEnvironment();String forName[] ge.get…

mount --bind

mount --bind 能够镜像的把目录挂载到其他路径下mount --bind //此命令可以把目录挂载到其他目录,有镜像功能,会占用两份同样大小的空间,当你umount的时候,所作的镜像会立马消失. $ls ftp tools $cd ftp $mkdir /home/ftp/tools $cd tools $pwd /home/ftp/tools $mount --bin…

Javascript URL编码方法的比较

javascript中存在几种对URL字符串进行编码的方法&#xff1a;escape()&#xff0c;encodeURI()&#xff0c;以及encodeURIComponent()。这几种编码所起的作用各不相同。 escape() 方法&#xff1a; 采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊…

前端、云与人工智能的碰撞 | GDG广州

活动介绍 随着Google TensorFlow的开源升级、前端技术以及云计算的不断发展更迭&#xff0c;企业和开发者都需要与时俱进&#xff0c;才能不被时代大潮给淘汰。本次GDG沙龙旨在通过多个专题演讲为开发者们分享技术进步和业务经验&#xff0c;聚焦前端技术、人工智能以及云计算…

java三维滑雪,第六章 三维数据空间分析方法.ppt

第六章 三维数据空间分析方法* * * * 可视性分析 * * 自然邻域法插值 基本思路&#xff1a; 利用输入点及邻近栅格单元进行插值生成栅格表面。 方法&#xff1a; 利用输入数据点(样本点)为节点&#xff0c;建立Delaunay三角形; 样本点的邻域为其周边相邻多边形形成的凸集中最小…

求教关于NFS服务器的防火墙的设置

我都研究了两个星期的NFS的防火墙了呀,开了rpcinfo -p 显示的所有端口,有hosts,hosts.allow,hosts.deny下的文件也设置了过了呀,可是我开了防火墙,NFS服务器的客户端和和服务器都无法工作呀,那位好心人帮我下呀,最好是有做的这方面的实例的高手呀,共享下你的成功经验呀转载于:h…

退信之550 5.7.1 Unable to relay for *@*.com

"550 5.7.1 Unable to relay for **.com"是常见的退信之一&#xff0c;今天我们就看看导致这个退信的真实原因&#xff0c;以及在mdaemon邮件服务器中遇到这个问题如何解决。接下来&#xff0c;我们看看来自真实环境退信截图。 退信分析&#xff1a;这是一封sh.com域…

“叽里呱啦”说英语,这家公司要用AI增值语言输出能力

11 月 29 日&#xff0c;在线英语启蒙教育品牌叽里呱啦在北京召开“让天赋发声”品牌发布会。叽里呱啦联合创始人兼 CEO 谢尚毅首次对外公开品牌战略&#xff0c;围绕内容、教研、科技三大教育内核&#xff0c;打造教育 IP&#xff0c;积蓄产品力&#xff0c;搭建英语启蒙教育的…

Windows 文件服务器升级跨林迁移(二)

迁移文件服务器登陆到ADMT迁移服务器上&#xff0c;打开ADMT管理控制台&#xff0c;邮件点击AD迁移工具&#xff0c;选择"计算机迁移向导"点击下一步选择源域为旧的控&#xff0c;目标域为新域控&#xff0c;点击下一步从域中选择计算机&#xff0c;点击下一步添加文…

mytag.class.php,织梦CMS/dedecms织梦模板留言板调用{dede:}标签的头部尾部的方法

织梦模板网站留言板调用网站的head.htm&#xff0c;footer.htm的方法二&#xff0c;好多人都想在留言本guestbook.htm里实现dede的标签调用&#xff0c;问题是在plus里不支持dede标签的应用。现在有一个简单的办法可以调用标签。拿在留言本调用head.htm实例一般我们在首页调用h…

用 GDI 操作 EMF 文件[2]: PlayEnhMetaFile、DeleteEnhMetaFile

创建 EMF 文件, 并同时绘制在窗体.unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implem…

从Storm到Flink:大数据处理的开源系统及编程模型(文末福利)

本文节选自CCF大数据教材系列丛书之《大数据处理》&#xff0c;本书由华中科技大学金海教授主编&#xff0c;包括大数据处理基础技术、大数据处理编程与典型应用处理、大数据处理系统与优化三个方面。本教材以大数据处理编程为核心&#xff0c;从基础、编程到优化等多个方面对大…

mac软件全屏时候最顶上任务栏保留,MAC能不能做一个把程序放在顶部菜单栏的功能...

KochiyaOcean emmmm&#xff0c;我修改了ico为png在app.js 第 22 行const poiIconPath path.join(ROOT,assets,icons,process.platform linux ? poi_32x32.png : poi.png, 将箭头所指的poi.ico 被我修改成了poi.png (不知道你说的是不是修改这里&#xff0c;我看到的icon pa…

Nginx 虚拟主机配置及负载均衡

虚拟主机配置&#xff1a; 在现实中&#xff0c;公司为了充分利用服务器资源 &#xff0c; 一台 Nginx 服务器会同时挂多个站点&#xff0c;这些站点可以基于80端口配置 N 多不同域名的服务器&#xff0c;那么&#xff0c;怎样实现这一功能呢&#xff0c;接下来就让我们学习一下…