参考链接菜鸟教程
package com.zfc.kotlin //声明包名
import com.zfc.person.Person //引用包名
fun main(args:Array){
Person.sex
print("helloworld")
}
在kotlin中,进行包声明的时候,可以使得原文件的位置与包名不一致。方法和类都是可以通过包名定位到的。如果没有指定包名,则默认就是default
在kotlin中,有一些包是默认导入的。比如:
* kotlin.*
* kotlin.annotation.*
* kotlin.collections.*
* kotlin.comparisions.*
* kotlin.io.*
* kotlin.ranges.*
* kotlin.sequences.*
* kotlin.text.*
print("helloworld") //该方法来自 io包
String //该字符串类型 来自 kotlin包
默认导入以上包,使用起来很简洁。
函数定义的形式 fun methodName (params:ParamType) : ReturnType
关键字 方法名 (形参标识符:形参类型):返回值类型
例如:
fun sum(x:Int,y:Int):Int{
return x + y
}
kotlin方法可以根据返回值自动退换类型
fun sum(x:Int,y:Int) = x+y
但是
public fun sum(x:Int,y:Int):Int = x+y // public 方法则必须明确写出返回类型(亲测可以不带返回值类型)
无返回值的函数
fun sum2(x: Int,y: Int):Unit{
print(x + y)
return
}
Unit的描述:This type corresponds to the `void` type in Java. 并且可以省略
/**
* 可变参数的函数,参数使用关键字 vararg 进行修饰
*/
fun varAgrsFun(vararg params: Int) {
for (v in params) {
println(v)
}
}
//首先声明一个表达式
val lamadaTravel:(Int) -> Int = {x -> x * 2 * x}
//然后按照调用方法的形式,去调用lamada函数
println(lamadaTravel(1))
个人理解:当某个函数的传入参数和输入参数形成某种简洁的关系时,可以用lamada表达式快速完成
定义变量,格式如下:
var <表示符> :<类型> = <初始化值>
定义常量,格式如下:
val <标识符> : <类型> = <初始化值>
举例如下:
var android: String = "android"
val iOS: String = "iOS"
//iOS = "11" //相当于java中的final,不能重新赋值
//在kotlin中声明变量,关键字和标识符不可缺少。类型和初始化最多只可以缺少一个。
var java = "java"
var php: String
php = "世界上最好的语言"
注释分为单行注释、和多行注释
与java中不同的是,kotlin的块注释可以嵌套
$ 表示一个变量名或者一个变量值
$varName 表示变量的值
${varName.fun()} 表示变量的方法的返回值
${'$'} //转义为 $
举例如下:
var php: String
php = "世界上最好的语言"
println("how to descripe : $php")
println("how to descripe kotlin : ${php.replace("好", "坏")}")
执行结果:
how to descripe php : 世界上最好的语言
how to descripe kotlin : 世界上最坏的语言
kotlin的空安全设计机制,对于可以为空的参数,要做非空判断(防御式编程)。空判断处理,有两种 一种是字段!!.fun() 抛出异常;另一种是 字段?.fun 不做任何处理返回值为null或者配置?: 返回某个特殊值
举例如下:
var name: String? = null //变量 可以为 空
var size = name?.length //返回值为空
var size1 = name!!.length //空指针
var size2 = name?.length ?: -1 //返回值为-1
当一个引用的类型可能为空时,其类型一定是要可以为空的(引用是指变量的引用或者方法返回值的引用)。
我们可以使用 is 运算符检测一个表达式是否某类型的一个实例(类似于Java中的instanceof关键字)。
fun getStringLength(obj: Any): Int? {
if (obj !is String)
return null
// 在这个分支中, `obj` 的类型会被自动转换为 `String`
return obj.length
}
for循环中的关键字是 in, step表示增长或者减少的"幅度"
for(i in 1..10 step 3){
// 1,4,7,10
}
for(i in 10 downTo 1 step 3){
//10,7,4,1
}
for (i in 1 until 10 step 3) { //注意 util是一个闭区间
// 1,4,7
}