1. 再也不用写分号了
是的,你没听错,只要你用了kotlin就再也不用担心忘记写分号了,这点真的不要太爽啊。
2. 输出语句再也不用写System.out.println()
这么一大长串了
kotlin里面的输出语句非常简单,输出是
print()
,输出一行是println()
,其实从以上两个特点来看风格有点像python,但是python代码的作用域是和缩进有关系,这点就很蛋疼了,万一那天写代码的时候眼神不好缩进少了或多了一格不就gg了吗,然而kotlin保留了大括号,这点就让我更加喜欢了
3. kotlin中创建一个对象不需要写“new”关键字
熟悉java的人肯定都知道一个段子,程序员如果没有女朋友那就去new一个出来,但是如果kotlin程序员没有女朋友的话他连new一个对象出来的机会都没有,来看看kotlin里面是怎么创建一个对象的
var person=Person()
没有new关键字,也没有分号,对象名前面也不像java里面要先写类的名字,这里直接用var或者val来申明了
4. getter/setter
相信经常写java的同学一定会对这两个方法很熟悉,getter和setter虽然说IDEA会帮我们生成,但是每次都要自己去生成真的很烦啊,然而在Kotlin中,getter和setter是可选的,如果你没有在代码中创建它们,它是会默认自动生成。
比如说:
class Account {
var name: String = ""
var age: Int = 0
var balance: Double = 0.0
}
和下面的代码是等价的
class Account {
var name: String = ""
var age: Int = 0
var balance: Double = 0.0
// 这种set和get方法不推荐在代码中自己手动去写
set(vaule){
field = value
}
get() = field
}
这里的getter/setter的写法又有点类似c#,所以说kotlin是一个柔和了很多语言优点的语言,集众家之所长形成的。
当然有几点很重要:
- 用val申明的对象不允许设置setter函数,因为该函数是只读的。
- 类的定义在声明属性时,Kotlin采用默认访问修饰符public,所以在kotlin中如果也用了private修饰符,那同样得定义一系列的set()/get(),不然在类外面无法通过对象获取属性。 例如:
class Account {
private var name: String = ""
private var age: Int = 0
private var balance: Double = 0.0
fun setName(name: String) {
this.name = name
}
fun getName(): String {
return this.name
}
fun setAge(age: Int) {
this.age = age
}
fun getAge(): Int {
return this.age
}
fun setBalance(balance: Double) {
this.balance = balance
}
fun getBalance(): Double {
return this.balance
}
}
5.类的声明
java类的成员变量,构造方法,成员方法声明方式
public class JavaBean {
private String name;
public JavaBean(String name) {
this.name = name;
}
public void hello(){
System.out.println("name="+name);
}
}
kotlin类的成员变量,构造方法,成员方法声明方式
class KotlinBean(val name:String){
fun hello(){
println("name"+name)
}
}
6. 空安全
为什么要说空安全,在Java代码中,我们经常要做判空处理,就是所谓的if(xx!=null){//doSomething()}
,但是在kotlin中它需要调用一个操作符“ ?”来明确指定一个对象,或者一个属性变量是否可以为空。
7. Kotlin的when语句和Java的switch语句
kt中的when语句和Java中的switch语句的作用是相同的,但是写法上却不尽相同,先看示例:
Kotlin 的 when 循环判断语句
fun test(value: Int){
when(value){
10 -> println("数字10");
20 -> println("数字20");
30 -> println("数字30");
else ->{
println("未知数");
}
}
}
Java的switch语句
private void test(int value) {
switch (value) {
case 10:
println("数字10");
break;
case 20:
println("数字20");
break;
case 30:
println("数字30");
break;
default:
println("未知数");
}
}
可以很明显的看出来kotlin里的when语句有lambda的风格,虽然用了->
和else
代替了switch语句中的case
和default
使得代码量少了很多,但是其实可读性却少了很多
8. 继承,接口等的关键字
- 对于继承,用
:
代替extends
关键字
Java:MainActivity extends Activity
,
Kotlin:MaiActivity :Activity()
- 对于接口,用
:
代替implements
Java:
public class MammalInt implements Animal{
public void eat(){
System.out.println("Mammal eats");
}
}
kotlin:
class Child : MyInterface {
override fun bar() {
// 方法体
println("bar")
}
}
9. for循环的变化
作为初学者,最常用的莫过于for循环了(虽然偶尔也会用用while循环,do...while的话,额,那是啥?)而在kotlin中,for循环的变化也是非常大的。举个栗子:
在java中是这样写的for(int i = ; i < 100; i++)
Kotlin是这样写的for (i in 0..99)
kotlin中的那个写法叫做区间,和python中的range()函数类似,但是用起来会更方便。
这里做个插曲来介绍下Kotlin中的区间,注意
until/step/downTo
关键字的使用
// 左闭右开区间,合法值包括11,但不包括66
for (i in 11 until 66) { ... }
// 每次默认递增1,这里改为每次递增4
for (i in 23..89 step 4) { ... }
// for循环默认递增,这里使用downTo表示递减
sfor (i in 50 downTo 7) { ... }
增强For循环
java中: for(集合 变量:集合名)
kotlin中:for(变量名 in 变量集合)
while语句和do..while语句在kotlin中和java基本无异
最后
先简单的总结下自己在学kotlin的过程中和Java的对比,有点乱,暂时先到这里,等着深入学习后继续总结。