一、声明函数、变量、类、枚举、属性
变量
以关键字开始,接变量名,最后可加类型:
val a = 12
val a: Int = 1//因为赋值的类型是确定的,所以可以省略类型
如果不加指定的变量类型,编译器会分析初始化表达式值,并将其类型作为变量类型。如果不提供可以赋给这个变量值的信息,编译器就无法推断类型。
val(来自value)——不可变引用。相当于final。
var(来自variable)——可变引用。相当于非final。
默认情况下应尽可能使用val关键字,仅在必须时替换为var
字符串模板,在字符串字面值中可以直接引用变量,使用$
fun main(args: Array<String>) {
val name = if (args.isNotEmpty()) args[0] else "Kotlin"
println("Hello, $name!")
println("Hello, ${args[0]}")//还可以引入复杂表达式
println("Hello, ${ if (args.isNotEmpty()) args[0] else "Kotlin"}")//还可以引入更复杂的表达式
}
若要显示$需要转义
println("\$name!")//打印结果为$name!
函数
/**
* 没有返回任何东西的函数
*/
fun main() {
println("Hello,world!")
}
/**
*返回Int
*/
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}
/**
* 上面函数使用表达式函数体
* 其返回类型也可以去掉
* 只有!只有表达式函数的返回类型可以省略
*/
fun max(a: Int, b: Int) = if (a > b) a else b
类
先看一个简单的JavaBean
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
而Kotlin中只需
class Person(val name: String)
通常称其为值对象,其中public修饰关键字也消失了,因为Kotlin中默认为public
属性
Java中字段+setter/getter称为属性;Kotlin中属性时头等语言特性,完全代替了字段+setter/getter,在类中声明属性和声明字段一样,使用val、var关键字即可。val只读,var可变。
声明属性:
class Person {
val name: String
var isMarried: Boolean
}
使用属性:
val person = Person("Bob", true)
println(person.name)
println(person.isMarried)
person.isMarried=false//将值修改为false,对应Java中person.setMarried(false)
println(person.isMarried)
由于内置了getter,若想即时计算输出结果则需要自定义getter
自定义访问器
定义矩形类,若长等于宽则为正方形
class Rectangle(val height: Int, val width: Int) {
val isSquare: Boolean
get() {
return height == width
}
}