1. 改进点/基础

//安全判空
val length = text?.length; //类型转换
if (object is Car) {
var car = object as Ca
} //操作符变化
& and
| or
^ xor
>> shr
<< shl //打印日志
print("123123")
println("asdassda")

2. 字符串

//多行字符串
val xx = """asdasdasd
asdasdsd """; //字符串模版
var a = 1; val s1 = "a is $a"

4. 语法

var name = "123"; 	//可变变量
val name = "asdasd"; //不可变量,相当于java的final
var name: String = ...;

4.1 function

//定义function
fun sum(a: Int, b: Int): Int {
return a + b;
} //默认参数
fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size) {
} //可变参数
fun <T> asList(vararg ts: T): List<T> {
val result = ArrayList<T>()
for (t in ts) // ts is an Array
result.add(t)
return result
}
val a = arrayOf(1, 2, 3) //扩展对象上的function(替换代理模式), 待扩展对象+方法名+返回值
fun Any?.funExt(): String {
if (this == null) return "null"
return toString()+"11111";
}
val str = "SSSS"; println (str.funExt()); //若返回值可能为null, 必须显示定义,否则运行时报错
fun parseInt(str: String): Int? {
}

4.2 属性

//扩展属性
val <T> List<T>.lastIndex: Int{
get() = size - 1
}

4.3 Lambdas

//lambdas表达式定义
//单个入参时,默认it
val sum = { x: Int, y: Int -> x + y }; //高阶函数 函数作为方法入参
//示例1--
fun <T, R> List<T>.map(transform: (T) -> R): List<R> {
val result = arrayListOf<R>()
for (item in this)
result.add(transform(item))
return result
}
//调用方式: val doubled = ints.map { value -> value * 2 }
或是 ints.map { it * 2 } //示例2--内联函数
fun <T> max(collection: Collection<T>, less: (T, T) -> Boolean): T? {
var max: T? = null
for (it in collection)
if (max == null || less(max, it))
max = it;
return max
}
//调用: max(strings, { a, b -> a.length < b.length }) //未使用的参数可使用_代替
map.forEach { _, value -> println("$value!") }

5. Class

5.1 Class类和继承

//定义
class Invoice { }
或 class Person(val firstName: String, val lastName: String, var age: Int) {
// ...
} //构建函数,一个主,多个次构造函数
//可自带默认参数
class Customer(val customerName: String = "") //主构造函数是class声明的一部分, 构造函数默认public
class Customer(name: String) {
init {
logger.info("Customer initialized with value ${name}")
}
}
class DontCreateMe private constructor () { } //构造方法置为private //次构造函数,可多个
class Person(val name: String) {
constructor(name: String, parent: Person) : this(name) {
parent.children.add(this)
}
} //继承
class MyView : View {
constructor(ctx: Context) : super(ctx)
constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs)
} //覆写方法--overide
//kotlin中重写必须明确指定,使用open声明(否则编译报错)可被重写,open的fun必须包含在open的class中
open class Base {
open fun v() {}
fun nv() {}
}
class Derived() : Base() {
override fun v() {}
} //覆写规则
open class A {
open fun f() { print("A") }
fun a() { print("a") }
} interface B {
fun f() { print("B") } // interface members are 'open' by default
fun b() { print("b") }
} class C() : A(), B {
// The compiler requires f() to be overridden:
override fun f() {
super<A>.f() // call to A.f()
super<B>.f() // call to B.f()
}
} //覆写property //Abstract

5.2 property和Fields

class Address { var name: String = ... 	};

//改写getter和setter方法
val isEmpty: Boolean get() = this.size == 0;
var stringRepresentation: String
get() = this.toString()
set(value) {
setDataFromString(value) // parses the string and assigns values to other properties
} //private setter
var setterVisibility: String = "abc"
private set

5.3 interface接口

interface MyInterface {
fun bar()
fun foo() { }
}
class Child : MyInterface {
override fun bar() {
// body
}
}

5.4 Data Classes 只包含数据的Class

//针对此种模型,kotlin额外定义了一些扩展方法
-- equals()/hashCode() pair,
-- toString() of the form "User(name=John, age=42)",
data class User(val name: String = "", val age: Int = 0); //示例1 //copy方法
val jack = User(name = "Jack", age = 1)
val olderJack = jack.copy(age = 2)

5.5 泛型Generics

6. 逻辑操作

6.1 for循环

for (item in items) {
println(item)
}

6.2 退出循环-break label

//退出多重for循环
lxx@ for (i in 1..10) {
for (j in 1..10) {
println("x=$i;y=$j");
if (i == 5) break@lxx;
}
} //forEach中退出当次循环
mutableListOf(1, 2, 3,4).forEach {
if (it == 2) return@forEach
print(it);
}

6.3 when

//替换switch Case
var grade = when (score) {
9, 10 -> "Excellent"
in 6..8 -> "Good"
4, 5 -> "Ok"
in 1..3 -> "Fail"
else -> "Fail"
} when {
"orange" in items -> println("juicy")
"apple" in items -> println("apple is fine too")
}

6.4替换3目运算符

val text = if (x > 5)
"x > 5"
else "x <= 5"
fun maxOf(a: Int, b: Int) = if (a > b) a else b

15. 其它

15.1 main函数

class KotlinTe { 	}
fun main(args: Array<String>) {
var output: String? = "123123";
println(ou);
}

15.2 与java互相调用

//java中调kotlin
1).调用相同 //kotlin中调java
1).kotlin中无new关键字,其它属性-方法调用相同

15.3 默认导入

kotlin.*; 							kotlin.annotation.*; 	kotlin.collections.*;
kotlin.comparisons.* (since 1.1); kotlin.io.*; kotlin.ranges.*;
kotlin.sequences.*; kotlin.text.*; java.lang.*; kotlin.jvm.*;

15.4 kotlin的maven依赖

IDEA maven工程中创建kt文件时会提示增加kotlin依赖,默认即可。(包括dependency和build两类标签)

Kotlin基础知识的更多相关文章

  1. Kotlin搞起来——2.基础知识

    在上一节中简单的给大家介绍了下Kotlin的特点,以及结合自己实际项目 中的使用来帮助大家了解这门语言,其实真的没你想象中的那么难,本文打算 介绍的是Kotlin中基础相关的一些语法(用法),有个大概 ...

  2. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

  3. 你不得不知的Java基础知识

    本篇博客主要记录Java中面向对象的概念和Java语法的基础知识. 面向对象 什么是面向对象 面向对象是一种优秀的软件设计思想,是相对于面向过程.面向切面等设计思想的一种软件设计理念.它的核心思想是运 ...

  4. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  5. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  6. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  7. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  8. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  9. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

随机推荐

  1. 【转】Pro Android学习笔记(五三):调试和分析(1):Debug视图和DDMS视图

    目录(?)[-] Debug视图 DDMS视图 查看应用运行状态 进入debug状态 HPROF Thread信息 Method信息 Stop 截图 UI层次架构信息 其它的 Tab中提供的功能 我们 ...

  2. 三、使用maven创建scala工程(scala和java混一起)

    本文先叙述如何配置eclipse中maven+scala的开发环境,之后,叙述如何实现spark的本地运行.最后,成功运行scala编写的spark程序. 刚开始我的eclipse+maven环境是配 ...

  3. 安装pyenv版本管理

    系统:Centos7.4 安装pyenv是为了更好的管理python的版本. 在进行安装操作之前,首先使用普通用户test,进行操作,如下: #安装之前先安装依赖的库 [test@localhost ...

  4. 在VirtualBox中安装CentOS 7【转载】

    当初接触Linux的时候,因为条件限制,只能在VirtualBox虚拟机中安装Linux系统使用,由于是小白,爬了好多坑.于是决定写一篇关于在虚拟机中安装linux系统的文章.一是为了巩固自己的知识, ...

  5. fsck磁盘检查修复

    fsck 使用方式 : fsck [-sACVRP] [-t fstype] [--] [fsck-options] filesys [...]说明 : 检查与修复 Linux 档案系统,可以同时检查 ...

  6. div中嵌套的多个div使用了浮动后居中的办法

    今天做网页的时候遇到了标题中的问题,网上查到了解决办法,记录一下一放以后忘记 <div class="wai"> <div style="float:l ...

  7. pip 在windows下如何升级

    建议:由于是pip的国外的,在更新之前先开启vpn,这样更新会顺畅些. 官方网页要求在 cmd中输入以下命令进行 pip的 更新: python -m pip install -U pip 更新成功后 ...

  8. R语言简单作图

    以下函数只为满足常用的若干作图需求. 基本作图: plot(x).plot(x, y) #散点图,最多两个变量     #可使用参数type生成不同的效果图.常用'l'.'o'.'h',分别为折线图, ...

  9. javascript 数组中出现的次数最多的元素

    javascript 数组中出现的次数最多的元素 var arr = [1,-1,2,4,5,5,6,7,5,8,6]; var maxVal = arr[0]; // 数组中的最大值 var min ...

  10. Python pandas检查数据中是否有NaN的几种方法

    Python pandas: check if any value is NaN in DataFrame # 查看每一列是否有NaN: df.isnull().any(axis=0) # 查看每一行 ...