当前位置:   article > 正文

Koltin 语言与Java语言有哪些差异?_kotlin和java的区别

kotlin和java的区别

目录

1. 变量声明方式不同

2. 方法(函数)定义略有不同

3. 逻辑控制关键字 if 的使用区别

4. 继承的区别

5. 接口和实现的区别

6. Koltin 的数据类有什么用?


1. 变量声明方式不同

Koltin声明变量的方式与Java类似,但是顺序不太一样。

举例如下

Java声明一个不可变String:final String name;

Java声明一个可变String:String name;

总结就是 变量修饰符(可选)  变量类型 变量名

Koltin声明一个不可变String:val name String;

Koltin声明一个可变String:var name String;

补充说明:val(value的简写),声明一个变量不可变,与Java中的final修饰类似;

var(variable的简写),声明一个变量可变,即不被final修饰;

总结就是 变量修饰符(可选) 变量名 变量类型

也可以看出,Java与Koltin声明变量最大的区别就是变量名和变量类型顺序换了一下;

2. 方法(函数)定义略有不同

Java中的方法定义方式

方法修饰符 方法返回值 方法名(参数1类型 参数1名称,参数2类型 参数2名称,......){方法体}

Koltin 中方法定义方式

fun(固定位fun,function的缩写) 方法名 (参数1名称 参数1类型,参数2名称 参数2类型,......):方法返回值类型{方法体}

3. 逻辑控制关键字 if 的使用区别

Koltin语言中 if 关键字比Java语言中多了一个功能,它可以有返回值,很好理解,举例如下

  1. // fun定义一个方法,名为largeNumber,方法返回较大的一个数
  2. // 参数分别为 Int 类型的num1和Int类型的num2,方法返回值类型也为Int
  3. fun largerNumber(num1: Int, num2: Int): Int {
  4. // if 可以有返回值,返回较大的一个数,定义一个val不可变参数value接收
  5. val value = if (num1 > num2) {
  6. num1
  7. } else {
  8. num2
  9. }
  10. // 返回参数 value
  11. return value
  12. }

4. 继承的区别

Java中,继承使用关键字 "extend",只要一个类没有被 final 修饰,默认就是可以被继承的。

继承方式为 子类 extend 父类

  1. // 定义父类Person人
  2. public class Person{
  3. }
  1. // 定义Student学生类继承Person人类
  2. public class Student extend Person{
  3. }

Koltin中,继承关键字要使用 "open",只有被"open"关键字修饰的类可以被继承,继承格式为

子类:父类()

举例如下:

  1. // 定义Father父类,切被open修饰
  2. open class Father {
  3. }
  1. // 父类Father被open修饰,子类Son可以继承Father
  2. // 继承格式为 子类:父类()
  3. class Son : Father(){
  4. }

5. 接口和实现的区别

Java中接口关键字为 "interface",Koltin中接口关键字也为"interface"

Java的接口实现比较简单,这里就不举例说明了,Koltin接口实现的方式如下图

  1. // 使用 interface 定义一个接口
  2. interface Person {
  3. // 定义两个变量 name 和 age,但是一般很少在接口中定义变量,只会定义接口方法,
  4. // 这里我只是举例说明
  5. var name: String
  6. var age: Int
  7. // 定义一个sayHell()接口方法,该方法无返回值
  8. fun sayHello()
  9. // 定义一个有返回值的接口方法largeNumber,方法返回值为Int
  10. fun largeNumber(num1: Int, num2: Int): Int
  11. }
  12. // 子类Student实现重写父接口Person中定义的方法
  13. class Student : Person {
  14. // override 重写父类中定义的name和age
  15. override var name: String = "Tom"
  16. override var age: Int = 18
  17. // override重写sayHello() 方法
  18. override fun sayHello() {
  19. println("$name is $age years old, say hello")
  20. }
  21. // override 重写largeNumber
  22. override fun largeNumber(num1: Int, num2: Int): Int{
  23. val value = if (num1 > num2) {
  24. num1
  25. } else {
  26. num2
  27. }
  28. return value
  29. }
  30. }

6. Koltin 的数据类有什么用?

Koltin 中的数据类非常类似于Java中的JavaBean,但是比JavaBean要简化的多,它只需要在类的前面定义一个 "data",即可标记该类为数据类,如下代码所示

  1. data class 类名(
  2. var param1:数据类型,
  3. var param2:数据类型,
  4. ......
  5. ){// 没有结构体的时候,该大括号可以省略}

当我们声明了一个数据类之后,编译器会帮我们做以下几件事

(1)生成equals()函数与hasCode()函数;

(2)生成toString()函数,由类名(参数1 = 值1,参数2 = 值2,....)构成;

(3)由所定义的属性自动生成component1()、component2()、...、componentN()函数,其对应于属性的声明顺序;

(4)copy()函数;

这里主要说一下componentN() 和 copy() 函数,很简单,它其实就是Java中的 get方法,set 方法。

下面我用代码来举例说明

Java代码定义一个User类,并定义name和pwd两个属性,如下所示

  1. // 定义一个 User 用户类,并定义 name 和age 两个变量
  2. public class User {
  3. private String name;
  4. private String pwd;
  5. // 添加无参构造器
  6. public User(){}
  7. // 添加全参构造器
  8. public User(String name, String pwd) {
  9. this.name = name;
  10. this.pwd = pwd;
  11. }
  12. // 生成每个属性变量的getter和setter方法
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public String getPwd() {
  20. return pwd;
  21. }
  22. public void setPwd(String pwd) {
  23. this.pwd = pwd;
  24. }
  25. // 生成toString方法
  26. @Override
  27. public String toString() {
  28. return "User{" +
  29. "name='" + name + '\'' +
  30. ", pwd='" + pwd + '\'' +
  31. '}';
  32. }
  33. }

可以看到,JavaBean代码的实体类代码量很大,显得很臃肿,也许有些同学会说我可以在类上标记@Data,@Gatter,@Setter注解省很多事情。

也许你很急,但别急,我们看一下Koltin语言实现同样的效果有多简单

Koltin 定义User用户类,并定义name和age两个属性

data class User(val name : String, val pwd : String)

OK,一行代码搞定,是不是很简单

然后我们在来说刚才的 componentN() 和 copy() 函数怎么用

copy函数举例:

  1. // 定义
  2. val user1 = User("kotlin","123456")
  3. println(user1)
  4. // 使用copy函数修改name属性的值
  5. val newUser1 = user1.copy(name = "new Kotlin")
  6. println(newUser1)

copy函数,类似Java的setter方法,括号内要对当前对象哪个属性做修改,直接写 属性名 = "要修改的值" 即可。

componentN() 函数举例:

  1. val user1 = User("kotlin","123456")
  2. println(user1.component1());
  3. println(user1.component2());

控制台输出结果为

koltin

123456

简单来说,Kotlin中定义一个数据类,则系统会默认自动根据参数的个数生成component1() ... componentN()函数。

componentN()函数就是用于解构声明的,现在我们的数据了共定义了name和pwd两个属性.

对应着,函数component1()获取到的就是第一个属性name;

函数component2()获取到的就是第二个属性pwd;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/1010010
推荐阅读
相关标签
  

闽ICP备14008679号