适合有java基础的,获取kotlin基础知识/语法等,Kotlin精讲-黑马程序员(原创)的学习笔记。
变量var (variable),常量val (value)
查看kotlin编译的字节码:
双击shift,在Search Everywhere
中输入Show Kotlin Bytecode
,在弹出的字节码文件标题处,点击Decompile
,即可看到对应的java文件。注释
kotlin的/**/
,/***/
注释是可以嵌套的。。。Kotlin不会提示使用
try...catch...
捕获异常,需要自己判断添加。
try可以返回一个值,由try或者catch的最后一行决定字符串
5.1 字符串截取
str.substring(0,5)
str.substringBeforeLast("/")
str.substringAfterLast("/")
5.2 字符串去空格
trim
trimStart
trimEnd
trimMargin
5.3 字符串支持三个双引号的原格式输出(包括 多行,转义字符等)
val name = """test multiline
\n
output"""
5.4 字符串模板
1. 字符串中使用变量
var age=1
println("age is ${age}")
println("age is $age")
2. 字符串中调用其他方法
// helloWorld() 是一个方法
var log = "from method ${helloWorld()}"
3. 字符串调用表达式
var name = "name is Jack"
var log = "log is ${name.replace("is", "was")}"
- 类型
// 智能转换,is判断后类型不需要强转,直接使用
is ==> instanceof
!is ==> !( instanceof )
as 类型转换,失败时运行异常
as?类型转换,失败时返回null
- 函数
7.1 函数体只有一行时,才可以写成表达式函数体
7.2 函数(默认参数,命名参数)
第一,带默认参数的方法,如果不使用命名参数,只能从头开始赋值。也就是赋值参数1、参数12、参数123、参数1234、参数12345。
第二,带默认参数的方法,某一个参数使用了命名参数,后面的参数赋值都需要使用命名参数。
7.3 可变参数,使用关键字vararg修饰,且只能出现在函数的最后一个参数。
7.4 顶层函数
顶层函数调用方法,如果在同一个包,直接调用即可,如果在不同包,导入对应的包就可以了。
7.5 嵌套函数
函数内可以定义另一个函数
7.6 中缀函数
一个函数为成员函数或者拓展函数,并且只有一个参数,并且使用infix修饰。在进行函数调用的时候可以使用中缀方式调用。
class A {
infix fun printInfo(name: String){
println(name)
}
}
fun main(){
val a = A()
a printInfo “content”
}
7.7 尾递归函数
尾递归是一种特殊的递归函数。当递归调用是整个函数体中最后执行的语句的时候,这个递归就是尾递归。
如果递归是尾递归,是可以在编译阶段进行尾递归优化的(可能调用栈溢出)。
直接使用tailrec关键字即可。(实际优化,将递归编译成while循环)
tailrec fun method()
如果,给一个非尾递归函数添加tailrec关键字,IDEA也是会自动提示的。