kotlin基本语法
首先我们来个demo1:
//变量的声明和使用
fun main(args: Array<String>) {//固定写法,函数入口
//声明变量并对他赋值,输出结果看是否赋值为"小明!"
var name = "小明!"
println("Hello, "+name)
//改变name变量的值,再次输出,看是否改变
name = "小华!"
println("Hello, "+name+" Where are you going?")
//下面这句如此赋值会报错,出现"The integer literal does not conform to the expected type String"
//即整型数据无法赋值给字符串变量
// name = 9;
}
声明时我们有给变量指定类型,为什么会在给name赋值为9时会报错?
因为在kotlin中数据有两种声明方式,一种是隐式声明,另一种是显示声明,而这儿的是隐式声明,隐式声明有两个特点:
1. 数据声明时没有人为明确数据类型
2. 数据必须初始化,否则会报错
因为数据必须初始化,kotlin就可以根据初始化的数据智能判断出该变量的类型,这样在demo中name的类型就是String,所以在下方给name赋值为9时就会报Integer无法赋值给声明为String的变量的错
其次我们再来个demo2:
fun main(args: Array<String>) {
//显示声明整型数据
var i:Int = 18
println("I'm " + i + " years old!");
//显示声明字符串数据
var s:String = "world!"
println("Hello "+s);
//常量
val str = "How are you?"
println(str);
//下面这句报错,因为str通过val声明为常量,所以只能第一次赋值,并不一定要初始化赋值
//当第二次赋值时,就会报错
// str = "ni hao!"
//下面案例充分说明上述如果没有声明时没初始化,可以后续给它赋值的观点
val m:String
m = "I'm fine!"
print(m)
}
然后我们再来看下编译器中代码:
在kotlin中,我们可以不用创建包,声明包名,默认为 default 包,当然为了规范代码,建议将包名带上,因为这样好划分每个包中不同的业务模块
在每个kotlin文件中,我们没有看到像Java一样的 import java.util.* 这种导入Java自己带的包文件,那是因为kotlin的包默认会导入每个kotlin文件中,有如下包:
- kotlin.*
- kotlin.annotation.*
- kotlin.collections.*
- kotlin.comparisons.*
- kotlin.io.*
- kotlin.ranges.*
- kotlin.sequences.*
- kotlin.text.*
类可有可不有,就像上图一样,虽然创建了JGrammar.kt文件,但是文件中并没有类,如果存在类,类名也可以和创建的文件名不一样
就像上图显示一样,文件名为JObject,但是文件中的类名为Jp,这儿完整的名称是com.leezp.test.Jp(当前包名加上类名就是当前类完整的名称,如果文件中有个在类以外的独立方法test,那它完整的名称也是包名加方法名,即com.leezp.test.test),在其他包中需要用到这个类,就需引用完整的包名!