函数组成为 fun 函数名(参数名: 参数类型, …): 返回值{}
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
Kotlin和Java一样是静态语言,所有表达式类型在编译期已经确定
变量由 var/val+变量名[: 数据类型][?][ = 值] 组成,如
var a = 1
var b: Int
b = 3
var s: String? = null
val language = arrayListOf("java")
language.add("Kotlin")
可在字符串中通过$引用变量
fun main(args: Array) {
val name = if (args.size > 0) args[0] else "Kotlin"
println("Hello,$name")
}
还可以用${}引用表达式
fun main(args: Array) {
if (args.size > 0) {
println("Hello,${args[1]}")
}
}
fun main(args: Array) {
println("Hello,${if (args.size > 0) args[0] else "Kotlin"} ")
}
只有数据没有其他代码的对象通常叫做值对象,如JavaBean
public class Person {
private String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
}
使用过程如下
Person person = new Person("java", 8);
person.setName("kotlin");
System.out.println(person.getName());
System.out.println(person.getAge());
将上述Java复制到代码.kt文件,会触发自动转换(.kt不要求类名和文件名一致,可将多个类放到同一文件,且文件名随意)
转换后的代码如下,name为var变量(默认带有getter和setter),而age为val变量(只有getter)
class Person(
var name: String,
val age: Int
)
使用方法如下
val person = Person("java", 8);
person.name = "kotlin"
println(person.name)
println(person.age)
如果一个属性可以根据其他属性计算,可使用自定义getter
class Rectangle(val height: Int, val width: Int) {
val isSquare: Boolean
get() {
return height == width
}
}