1、
fun main(args: Array<String>) {
val a=10;
val b=20
println(add(10, 20))
println(add1(a,b))
}
fun add(a:Int,b:Int):Int{
return a+b
}
//函数体只有一行代码 可以省略{} 省略return 用=连接
//返回值类型也可以省略
fun add1(a:Int,b:Int)=a+b
输出:
2、函数引用
fun main(args: Array<String>) {
val a=10
val b=20
println(add1(a,b))
//通多::可以获取函数的引用
var add2=::add1
println(add2(a, b))
//还有一种调用方式
println(add2.invoke(a, b))
//利用invoke有个好处就是可以空安全调用
println(add2?.invoke(a, b))
}
//函数体只有一行代码 可以省略{} 省略return 用=连接
//返回值类型也可以省略
fun add1(a:Int,b:Int)=a+b
输出:
3、函数变量
fun main(args: Array<String>) {
val a=10
val b=20
//函数变量
val add:(Int,Int)->Int={a,b->a+b}
println(add.invoke(a,b))
}
输出:
4、默认参数和具名参数
fun main(args: Array<String>) {
//假设有个请求方法,可以接受get请求和post请求,但是绝大部分情况都是post请求
sendRequest("http://www.baidu.com","get")
sendRequest("http://www.google.com","post")
sendRequest("http://www.google.com","post")
sendRequest("http://www.google.com","post")
sendRequest("http://www.google.com","post")
sendRequest("http://www.google.com","post")
}
fun sendRequest(url:String,method:String)
{
println("请求地址为${url},请求方式为${method}")
}
输出:
但是绝大部分都是post请求,我们能不能省略掉post参数呢?
于是,我们用“默认参数”修改代码
fun main(args: Array<String>) {
//假设有个请求方法,可以接受get请求和post请求,但是绝大部分情况都是post请求
sendRequest("http://www.baidu.com","get")
sendRequest("http://www.google.com")
sendRequest("http://www.google.com")
sendRequest("http://www.google.com")
sendRequest("http://www.google.com")
sendRequest("http://www.google.com")
}
fun sendRequest(url:String,method:String="post")
{
println("请求地址为${url},请求方式为${method}")
}
输出:
fun main(args: Array<String>) {
//假设有个请求方法,可以接受get请求和post请求,但是绝大部分情况都是post请求
sendRequest("http://www.baidu.com","get")
//如果传递参数时,指定了参数的名字,那么参数位置是可以不固定的
sendRequest(method = "post",url = "http://www.google.com")
}
fun sendRequest(url:String,method:String="post")
{
println("请求地址为${url},请求方式为${method}")
}
输出:
5、可变参数,关键字vararg
fun main(args: Array<String>) {
println(add(10, 20, 30))
println(add(1, 2, 3, 4, 5, 6))
}
fun add(vararg a:Int):Int{
var result=0
a.forEach { result+=it }
return result
}
输出:
6、异常
fun main(args: Array<String>) {
var a=10
var b=0
try {
a/b
}
catch (e:Exception)
{
println("捕获到异常")
}
finally {
println("finally")
}
}
输出:
import java.io.BufferedReader
import java.io.File
import java.io.FileReader
fun main(args: Array<String>) {
var file: File = File("/sdcard/a.txt")
//没有报错,在kotlin 中不检查编译时异常,kotlin认为大部分的编译时异常都不会发生
//但是在java中编译时异常是需要捕获的
var br:BufferedReader= BufferedReader(FileReader(file))
}
看下在java中
public static void main(String[] args) {
File file=new File("/sdcard");
BufferedReader reader= null;
try {
reader = new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}