kotlin基础笔记之类、接口、函数和基本语法

纯粹是个人学习总结,如有不对的地方请吐槽。

kotlin包概念

其实kotlin类和包没有直接的联系,包名可以和文件存放的路径不一致。
比如文件的存放地址是:com.xxx.yyy,包名可以是 package com.yyy.xxx

Imports关键字

在java中是用于导入的
在kotlin中也是导入作用的,它可以导入类,包,变量等等,导入方式和java也是一样的
如果包有冲突可以用以下方式重命名
import foo.Bar // Bar 可以使用
import bar.Bar as bBar // bBar 代表 'bar.Bar'
在这里as关键字的作用就是将bar.Bar变成bBar来代表

定义一个kotlin类

//普通类定义
package com.yyy.xxx
class A{
    fun a(){
      println("这是一个无参无返回值的方法")
    }
  }

//有继承关系的类
 package com.yyy.xxx
  class KotlinActivity : AppCompatActivity(){
  //实现父类的方法
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_kotlin)
    }
}
创建Kotlin类实例
val a = A()
跳转到KotlinActivity:
startActivity(Intent(this, MainActivity::class.java))

kotlin嵌套类

函数定义

只有一个表达式的函数定义

fun sum(a: Int, b: Int):Int = a + b  也可以 fun sum(a: Int, b: Int) = a + b
//后面的定义就是编译器可以推导出返回值类型,就可以不写返回值类型

没有返回值的函数定义

fun sum():Unit{ println("无参无返回值函数") }也可以fun sum(){ println("无参无返回值函数") }

默认参数函数定义

fun sum(b: Int, off: Int = 0, stepNum: Int = 1) {
}
调用方式:sum(10)//没有传递的参数就等于默认值,这样可以减少重载

命名参数函数定义

fun sum(str: String, isMax: Boolean = true,a: Char = ' ') {
}
调用方式:
1.默认参数调用sum(str)
2.命名参数调用sum(str,isMax=true,a='a')或者sum(str,a='a')
这种方式调用,代码可读性更强,更加灵活,没有传递的参数就是默认值
注意:命名参数语法不能够被用于调用Java函数中,因为Java的字节码不能确保方法参数命名的不变性

中缀符号

//给 Int 定义一个扩展方法
infix fun Int.shl(x: Int): Int {
}
调用方式:1 shl 2 或者 1.shl(2)
注意:只能有一个参数

函数扩展
在不继承类的情况下增加方法叫Extensions(扩展函数),我们需要在函数前加一个接收者类型作为前缀如给MutableList<Int> 添加一个 swap 函数:

fun MutableList<Int>.swap(x: Int, y: Int) {
    val tmp = this[x] // this 对应 list
    this[x] = this[y]
    this[y] = tmp
}
调用方式:
val l = mutableListOf(1, 2, 3)
l.swap(0, 2)
在swap() 函数中this持有的值是l

关于扩展的更多说明

变长参数函数定义

fun <T> asList(vararg ts: T): List<T> {
    val result = ArrayList<T>()
    for (t in ts)
        result.add(t)
    return result
}
调用方式:asList(1,2,3)或者asList(1,2,3,4,5),参数长度可随意变换

只有一个参数可以被标注为 vararg,如果vararg并不是列表中的最后一个参数,那么后面的参数需要通过命名参数语法进行传值,再或者如果这个参数是函数类型,就需要通过lambda法则.
如果参数中有一个是数组怎么传递?

val a = array(1, 2, 3)
val list = asList(-1, 0, *a, 4)
a变量在传递时一定要加前面的*号

局部函数定义
在一个函数里面包含一个函数

fun dfs(graph: Graph) {
    fun dfs(current: Vertex, visited: Set<Vertex>) {
        if (!visited.add(current)) return
        for (v in current.neighbors)
            dfs(v, visited)
    }
    dfs(graph.vertices[0], HashSet())
}

更多函数说明:https://huanglizhuo.gitbooks.io/kotlin-in-chinese/content/FunctionsAndLambdas/Functions.html

接口定义
interface MyInterface {
    fun bar()
    fun foo() {
        //函数体是可选的
    }
}
接口实现
class Child : MyInterface {
    fun bar () {
        //函数体
    }
}
和java一样一个类可以实现一个或多个接口

更多接口说明

基本语法

变量声明
var声明可变变量 
var i = 1
i = 2
println("i:"+i)
输出结果:i:2

val声明只读变量
val j = 1
val k:Int//只声明没有赋值
j=2//编译会报错
k = 3//第一次赋值,编译通过
val就相当于java的final
if else

if else 和java的用法基本一致,kotlin没有三目运算符那怎么实现呢,就是用if else如:

var j = if(number>3) 0 else 1
when

when用法相当于java中的switch,但是比switch强大
when的判断条件可以重复,如果重复了,就按照最先原则匹配。

while do ..while 循环

他们的用法和java中完全相同

字符串
赋值var str = "abc"
拼接:str+="def"//拼接后abcdef

模板字符串
println("${str}123");//打印abcdef123
运算:
var a=1
var b = 2
println("${str}123${a+b}");//打印abcdef1233
范围表达式
创建范围需要...操作符如:var i=1..10//i中包含1,2,3,4,5,6,7,8,9,10
创建降序范围:var i = 3 downTo 1//i中包含3,2,1
步长范围创建:var i = 1..10 step 5//i中包含1,6 降序也是一样的
in操作符
判断是否在某个范围
if (x in 1..10)
print("x:${x}是在1-10之间")
判断不在某个范围
if (x !in 1..10)
print("x:${x}不在1-10之间")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容