学习过Java,kotlin相对来说就比较简单。基本上就是Java的变形,我认为kotlin在操作和使用上都相对于Java来说比较方便。
如何运行kotlin代码
第一种方式就是在IntelliJ IDEA中运行。
第二种就是在线运行kotlin代码,在网址try.kotlinlang.org上面可以在线运行kotlin代码
最简单的kotlin代码
fun main() {
println("Hello,world!")
}
变量
val 只可读不可写
var 可读可写
fun main(){
val b=3
println("b="+3)
}
最后输出的结果为
b=3
如果要声明变量类型,语法结构如下
val b:Int=3
注:kotlin数据类型和Java差不多,我认为只是首字母大写了,以下是kotlin的基本数据类型:
Int//整形
Long//长整型
Short//短整型
Float//单精度浮点型
Double//双精度浮点型
Boolean//布尔型
Char//字符型
Byte//字节型
以下代码因为val只可读不可写,所以用var
fun main(){
var b:Int=3
b=b*3
println("b="+b)
}
结果为
b=9
函数
我觉得kotlin的函数特别简单,相对于Java来说,简化了许多的操作,下面是一个简单kotlin函数的写法
fun method(num1:Int,num2:Int):Int{
return max(num1,num2)
}
以上代码还可以进行一个简化操作
fun method(num1:Int,num2:Int):Int=max(num1,num2)
还能进一步进行简化
fun method(num1:Int,num2:Int)=max(num1,num2)
if条件语句
下面将上面的函数进行改写,变成if语句
fun method(num1:Int,num2:Int):Int{
var n=0
if(num1>num2){
n=num1
}else{
n=num2;
}
return n
}
这就是一个简单的if语句,如果你很细心,你会发现n=num2;后面出现了一个分号,我认为这说明kotlin语言也有一定的兼容性。
对于上面的代码我们还可以进行简化
fun method(num1:Int,num2:Int):Int{
val n=if(num1>num2){
num1
}else{
num2
}
return n
}
对此,你会发现n是一个多余的变量,所以可以进一步进行简化
fun method(num1:Int,num2:Int):Int=if(num1>num2){
num1
}else{
num2
}
这还不是最精简的代码,如果你想再精简的话,你也可以用一行代码来写出这个函数
fun method(num1:Int,num2:Int):Int=if(num1>num2) num1 else num2
when条件语句
通过上面简化的步骤,你应该学会了简化的一些读法,下面我们来学习when条件语句,我们继续创建一个方法
fun method(name:String)=when(name){
"cxk"->100
"dz"->90
else->60
}
当函数获得一个name时,如果是cxk,返回值为100;如果是dz,返回值为90;其他就是返回60
如果不在when中传递参数,则写法如下
fun method(name:String)=when{
name=="cxk"->100
name=="dz"->90
else->60
}
如果是以cxk开头的人,如cxkrap可以用.startsWith("cxk")来匹配,只要以cxk开头就是90
fun method(name:String)=when{
name.startsWith("cxk)->100
name=="dz"->90
else->60
}
when语句还能进行类型匹配
fun method(num:Number)=when(num){
is Int->println("is Int")
else ->println("error")
}
循环语句
kotlin中的for循环
首先用kotlin写一个区间
val range=0..5
这表示为【0,5】,当你了解了区间,我们就可以用for-in来遍历这个区间
fun main(){
for(i in 0..5){
println(i)
}
}
可以用until来表示一个左开右闭的区间
val range=0 until 5
表示的是【0,5)
如果你想跳过其中的元素,可以用step,如下
fun main(){
for(i in 0 until 6 step 2){
println(i)
}
}
相当于for-i结构中的i=i+2,所以结果为
0
2
4
前两个创建的都是升序区间,如果想创建降序,可用downTo
for(i in 5 downTo 1){
println(i)
}
上面创建了一个【5,1】降序区间
面向对象编程
kotlin和许多高级语言一样,也是面向对象的
首先我们先创建一个类
class Person{
var name=" "
var age=0
fun eat(){
println(name+"is eating. He is" +age+"years old.")
}
}
类建立好了,现在将类实例化(与Java类似,只是没有new关键词)
val p=Person()
现在我们在main()函数对p对象进行一系列操作
fun main(){
val p=Person()
p.name="cxk"
p.age=18
p.eat()
}
继承和构造函数
calss Student{
var sno=""
var grade=0
}
kotlin中任何一个非抽类都是无法被继承的,如果想要上面的Person类被继承。在类前面加个open
open class Person{...}
kotlin继承相当于Java,把extend变为了冒号:
class Student:Person(){
var sno=""
var grade=0
}
在kotlin函数中有主构造函数和次构造函数
kotlin提供了一个init结构体,所有主构造函数的逻辑都可以写在里面
class Student(val son: String,val grade:Int):Preson(){
inti{
println(son)
println(grade)
}
}
次构造函数在主构造函数之内,下面是一个简单的例子
class Student(val sno:String,val grade:Int,name:String,age:Int):Person(name,age){
constructor(name:String,age:Int):this.("",0,name,age){}
constructor():this("",0){}
}
次构造函数是通过constructor关键字来定义的
接口
kotlin的接口和Java基本上是一致的,具体实例如下
interface Study{
fun readBook()
fun doHomework()
}
class Student(name:String,age:Int):Person(name,age),Study{
override fun readBooks(){
println(name+"is reading")
}
override fun doHomework(){
println(name+"is doing homework)
}
}
在main函数中可以用下面代码调用两个接口中的函数
fun main(){
val student=Student("cxk",18)
doStudy(student)
}
fun student(study:Study){
study.readBooks()
study.doHomework()
}