Koltin 语言与Java语言有哪些差异?
目录1. 变量声明方式不同2. 方法(函数)定义略有不同3. 逻辑控制关键字 if 的使用区别4. 继承的区别5. 接口和实现的区别6. Koltin 的数据类有什么用1. 变量声明方式不同Koltin声明变量的方式与Java类似但是顺序不太一样。举例如下Java声明一个不可变Stringfinal String nameJava声明一个可变StringString name总结就是变量修饰符(可选) 变量类型 变量名Koltin声明一个不可变Stringval name StringKoltin声明一个可变Stringvar name String补充说明:val(value的简写)声明一个变量不可变与Java中的final修饰类似var(variable的简写)声明一个变量可变即不被final修饰总结就是变量修饰符(可选) 变量名 变量类型也可以看出Java与Koltin声明变量最大的区别就是变量名和变量类型顺序换了一下2. 方法(函数)定义略有不同Java中的方法定义方式方法修饰符 方法返回值 方法名(参数1类型 参数1名称参数2类型 参数2名称......){方法体}Koltin 中方法定义方式fun(固定位funfunction的缩写) 方法名 (参数1名称 参数1类型参数2名称 参数2类型......)方法返回值类型{方法体}3. 逻辑控制关键字 if 的使用区别Koltin语言中 if 关键字比Java语言中多了一个功能它可以有返回值很好理解举例如下// fun定义一个方法名为largeNumber方法返回较大的一个数 // 参数分别为 Int 类型的num1和Int类型的num2方法返回值类型也为Int fun largerNumber(num1: Int, num2: Int): Int { // if 可以有返回值返回较大的一个数定义一个val不可变参数value接收 val value if (num1 num2) { num1 } else { num2 } // 返回参数 value return value }4. 继承的区别Java中继承使用关键字 extend只要一个类没有被 final 修饰默认就是可以被继承的。继承方式为子类 extend 父类// 定义父类Person人 public class Person{ }// 定义Student学生类继承Person人类 public class Student extend Person{ }Koltin中继承关键字要使用 open只有被open关键字修饰的类可以被继承继承格式为子类父类()举例如下:// 定义Father父类切被open修饰 open class Father { }// 父类Father被open修饰子类Son可以继承Father // 继承格式为 子类父类() class Son : Father(){ }5. 接口和实现的区别Java中接口关键字为 interfaceKoltin中接口关键字也为interfaceJava的接口实现比较简单这里就不举例说明了Koltin接口实现的方式如下图// 使用 interface 定义一个接口 interface Person { // 定义两个变量 name 和 age但是一般很少在接口中定义变量只会定义接口方法 // 这里我只是举例说明 var name: String var age: Int // 定义一个sayHell()接口方法该方法无返回值 fun sayHello() // 定义一个有返回值的接口方法largeNumber方法返回值为Int fun largeNumber(num1: Int, num2: Int): Int } // 子类Student实现重写父接口Person中定义的方法 class Student : Person { // override 重写父类中定义的name和age override var name: String Tom override var age: Int 18 // override重写sayHello() 方法 override fun sayHello() { println($name is $age years old, say hello) } // override 重写largeNumber override fun largeNumber(num1: Int, num2: Int): Int{ val value if (num1 num2) { num1 } else { num2 } return value } }6. Koltin 的数据类有什么用Koltin 中的数据类非常类似于Java中的JavaBean但是比JavaBean要简化的多它只需要在类的前面定义一个 data即可标记该类为数据类如下代码所示data class 类名( var param1:数据类型, var param2:数据类型, ...... ){// 没有结构体的时候该大括号可以省略}当我们声明了一个数据类之后编译器会帮我们做以下几件事1生成equals()函数与hasCode()函数2生成toString()函数由类名参数1 值1参数2 值2....构成3由所定义的属性自动生成component1()、component2()、...、componentN()函数其对应于属性的声明顺序4copy()函数这里主要说一下componentN() 和 copy() 函数很简单它其实就是Java中的 get方法set 方法。下面我用代码来举例说明Java代码定义一个User类并定义name和pwd两个属性如下所示// 定义一个 User 用户类并定义 name 和age 两个变量 public class User { private String name; private String pwd; // 添加无参构造器 public User(){} // 添加全参构造器 public User(String name, String pwd) { this.name name; this.pwd pwd; } // 生成每个属性变量的getter和setter方法 public String getName() { return name; } public void setName(String name) { this.name name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd pwd; } // 生成toString方法 Override public String toString() { return User{ name name \ , pwd pwd \ }; } }可以看到JavaBean代码的实体类代码量很大显得很臃肿也许有些同学会说我可以在类上标记DataGatterSetter注解省很多事情。也许你很急但别急我们看一下Koltin语言实现同样的效果有多简单Koltin 定义User用户类并定义name和age两个属性data class User(val name : String, val pwd : String)OK一行代码搞定是不是很简单然后我们在来说刚才的 componentN() 和 copy() 函数怎么用copy函数举例// 定义 val user1 User(kotlin,123456) println(user1) // 使用copy函数修改name属性的值 val newUser1 user1.copy(name new Kotlin) println(newUser1)copy函数类似Java的setter方法括号内要对当前对象哪个属性做修改直接写属性名 要修改的值 即可。componentN() 函数举例val user1 User(kotlin,123456) println(user1.component1()); println(user1.component2());控制台输出结果为koltin123456简单来说Kotlin中定义一个数据类则系统会默认自动根据参数的个数生成component1() ... componentN()函数。componentN()函数就是用于解构声明的现在我们的数据了共定义了name和pwd两个属性.对应着函数component1()获取到的就是第一个属性name函数component2()获取到的就是第二个属性pwd