Kotlin笔记(一)

写在前面的话

最近看到github和掘金上面kotlin的文章越来越多了 正好项目闲下来了 所以趁此机会学习一下kotlin 借鉴别人的demo练手 怕遗忘 做笔记 更是一种鞭策。
感谢《Kotlin for android developers》中文版翻译 也由衷感谢所有为开源做出贡献的技术人员。

放在前面的养眼图

分割图.png

我们为什么学习Kotlin?

仅仅是为了语法糖吗?问这个问题或者疑问的时候 表明我们自身是存在几个问题的 1.身为一个开发者 不断学习才能不被淘汰。(检讨中 这段时间过于安逸 危机意识较淡薄。)2.你对Kotlin的了解不够 它不仅仅是语法糖 它还有着java1.7所没有的新特性。

它更加易表现:这是它最重要的优点之一。你可以编写少得多的代码。
它更加安全:Kotlin是空安全的,也就是说在我们编译时期就处理了各种null的情况,避免了执行时异常。如果一个对象可以是null,则我们需要明确地指定它,然后在使用它之前检查它是否是null。你可以节约很多调试空指针异常的时间,解决掉null引发的bug。
它是函数式的:Kotlin是基于面向对象的语言。但是就如其他很多现代的语言那样,它使用了很多函数式编程的概念,比如,使用lambda表达式来更方便地解决问题。其中一个很棒的特性就是Collections的处理方式。
它可以扩展函数:这意味着我们可以扩展类的更多的特性,甚至我们没有权限去访问这个类中的代码。
它是高度互操作性的:你可以继续使用所有的你用Java写的代码和库,因为两个语言之间的互操作性是完美的。甚至可以在一个项目中使用Kotlin和Java两种语言混合编程。

详见: 什么是Kotlin?

这里让我觉得比较酸爽的地方:
关于Javabean:
<code>

public class Artist {
    private long id;
    private String name;
    private String url;
    private String mbid;

    public long getId() {
      return id;
    }


    public void setId(long id) {
      this.id = id;
    }

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public String getUrl() {
      return url;
    }

    public void setUrl(String url) {
      this.url = url;
    }

    public String getMbid() {
      return mbid;
    }

    public void setMbid(String mbid) {
      this.mbid = mbid;
    }

    @Override
    public String toString() {
      return "Artist{" +
              "id=" + id +
              ", name='" + name + '\'' +
              ", url='" + url + '\'' +
              ", mbid='" + mbid + '\'' +
              '}';
    }
  }

</code>
Kotlin写法:
<code>

data class Artist (
    var id: Long,
    var name: String,
    var url: String,
    var mbid: String)

它会自动生成所有属性和它们的访问器,以及一些有用的方法,比如,toString()
</code>
函数支持(支持Lambdas)

view.setOnClickListener { toast("Hello world!") }

还有空指针,扩展方法。这个我还刚开始学 还没了解到 😀

再次感谢译文 详见 我们通过Kotlin得到什么

Kotlin开始项目

Intellij 15开始,插件是被默认安装了的,所以Intellij不需要做特别设置。大部分使用的是Android Studio 你需要进入Android Studio 的Preferences的plugin栏搜索“Kotlin”。安装Kotlin插件 重启Android Studio即可。

详见 Kotlin开始项目
最后 kotlin 官方文档翻译

类和函数

Kotlin中
<code>

class MainActivity {
    //大括号可以省略 如果没有类体
}

</code>

构造函数

在 Kotlin 中类可以有一个主构造函数以及多个二级构造函数。主构造函数是类头的一部分:跟在类名后面(可以有可选的类型参数)。有点拗口 代码如下:
1.主构造函数
<code>

class Person constructor(firstname: String){
    //如果主构造函数没有注解或可见性说明 constructor字段可以省略
}
//如果构造函数有注解或可见性说明 譬如public 那么constructor则不能省略并且可见性字段在前面
class Person private constructor(name: String){ 
   //  ... 私有不可见
 } 

//主构造函数不能包含任意代码 初始化代码可以放在init{}的代码块中
class Person constructor(firstname: String) {
    init {
        // ...  初始化代码块
    }
}

//注意主构造函数的参数可以放在初始化代码块中 也可以用在类的属性初始化声明处 即:
class Person(name:String) {
    val personKey = name. toUpperCase() //name字符串大写处理
}
//也可以这样声明
class Person(val name: String,val age: Int){
  //var 修饰可变 val只读 注意
}

参考可见性
</code>
2.二级构造函数
类可以加二级构造函数 需要添加前缀 constructor
<code>

class Person {
    constructor(parent: Person){
    }
}

</code>
关于二级函数后面还有些内容不太理解 所以不做必要的记录后面会一一学习。
更多参考 二级构造函数

创建类的实例以及类继承

1.创建类的实例:
kotlin没有new 这个字段的,所以实例化如下

val person = Person()

嵌套类、内部类或匿名类的更多内容

类成员
类可以包含:
-- 构造函数和初始化代码块
-- 函数
-- 属性 
-- 内部类
-- 对象声明
2.类继承:
默认任何类都是基础继承自Any(与java中的Object类似),但是我们可以继承其它类.这些其他类需要明确声明open或者abstract
<code>

open class BasePerson(name: String)
class Person(name: String,surname: String) : BasePerson(name)

abstract class BasePerson2(name: String)
class Person2(name: String,surname: String) : BasePerson2(name)

</code>
open注解与java中的final相反:它允许别的类继承这个类。默认情形下,kotlin 中所有的类都是 final ,对应 Effective Java :Design and document for inheritance or else prohibit it.

更多 参考官网和github上面中文翻译
补充:

class类中的函数

fun修饰如果没有指定返回值会返回Unit,与Java的void相似。但Unit是一个真正的对象 也可以指定它的返回值类型

fun add(x: Int,y: Int) : Int = x + y

更多参考 构造函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,322评论 5 465
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,288评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,227评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,015评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,936评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,534评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,995评论 3 389
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,616评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,907评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,923评论 2 315
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,741评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,525评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,016评论 3 301
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,141评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,453评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,054评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,249评论 2 339

推荐阅读更多精彩内容