当前位置: 首页 > news >正文

Android Kotlin 用法对比Java使用小结

Android Kotlin 用法对比Java使用小结

文章目录

  • Android Kotlin 用法对比Java使用小结
      • **一、基础语法对比**
        • 1. **变量声明**
        • 2. **空安全**
        • 3. **函数 / 方法**
      • **二、类与对象**
        • 1. **类定义与继承**
        • 2. **接口与实现**
      • **三、集合与 Lambda 表达式**
        • 1. **集合操作**
        • 2. **Lambda 表达式**
      • **四、Android 开发特有功能**
        • 1. **布局文件绑定**
        • 2. **协程(异步编程)**
        • 3. **扩展函数**
      • **五、空安全与异常处理**
        • 1. **空安全特性**
        • 2. **异常处理**
      • **六、性能与互操作性**
      • **七、总结与建议**
  • PS:学习这东西任何时候都不算晚

Kotlin 作为 Android 官方推荐的语言,相比 Java 具有更简洁的语法、空安全特性和更多现代语言特性。

几年之前是学习过kotlin,但是没怎么使用,大部分都忘记了,最近Android13系统的代码也逐渐增加kotlin代码了,

比如系统framework中的SystemUI,Permission的关键代码是Kotlin代码写的,所以想重新看看Kotlin的代码。

本文介绍一些入门级的Kotlin简单用法,可以对Kotlin的代码使用有个大致了解。

以下是 Kotlin 与 Java 在 Android 开发中核心差异的详细对比:

一、基础语法对比

1. 变量声明

Java

// 必须指定类型,不可省略
String name = "John";
final int age = 30;  // 不可变变量需加 final
int score;           // 可先声明后赋值
score = 90;

Kotlin

var name: String = "John"  // 可变变量
val age: Int = 30         // 不可变变量(类似 final)
val score: Int           // 声明时不初始化,则必须标记为 lateinit 或可空
lateinit var address: String  // 延迟初始化非空变量
2. 空安全

Java

// 可能导致 NullPointerException
String text = null;
int length = text.length();  // 运行时崩溃// 需要手动判空
if (text != null) {length = text.length();
}

Kotlin

// 默认不可为空
var text: String = null  // 编译错误// 显式声明可为空
var nullableText: String? = null
val length = nullableText?.length  // 使用安全调用符,返回 null 或长度// 非空断言(谨慎使用)
val forceLength = nullableText!!.length  // 若为 null 则抛出异常//  Elvis 操作符
val safeLength = nullableText?.length ?: 0  // 为空时返回默认值
3. 函数 / 方法

Java

// 传统方法
public int add(int a, int b) {return a + b;
}// 无返回值
public void printMessage(String message) {System.out.println(message);
}

Kotlin

// 简洁语法,可省略返回类型(类型推断)
fun add(a: Int, b: Int): Int = a + b// 无返回值(Unit 可省略)
fun printMessage(message: String): Unit {println(message)
}// 单表达式函数
fun getMessage() = "Hello, Kotlin!"// 默认参数
fun greet(name: String = "Guest") = "Hello, $name"

二、类与对象

1. 类定义与继承

Java

// 基类
public class Person {private String name;private int age;// 构造函数public Person(String name, int age) {this.name = name;this.age = age;}// Getter/Setterpublic String getName() { return name; }public void setName(String name) { this.name = name; }
}// 子类
public class Student extends Person {private String studentId;public Student(String name, int age, String studentId) {super(name, age);this.studentId = studentId;}
}

Kotlin

// 基类(默认 final,需显式声明 open 才能被继承)
open class Person(val name: String, var age: Int) {// 无需显式定义 Getter/Setter
}// 子类(主构造函数直接调用父类构造)
class Student(name: String, age: Int, val studentId: String) : Person(name, age)// 数据类(自动生成 equals、hashCode、toString 等)
data class User(val id: Long, val name: String)
2. 接口与实现

Java

// 接口
public interface ClickListener {void onClick(View view);
}// 实现
public class MyButton implements ClickListener {@Overridepublic void onClick(View view) {// 处理点击事件}
}

Kotlin

// 接口(可包含默认实现)
interface ClickListener {fun onClick(view: View)
}// 实现(无需显式 override 关键字,除非接口有多个同名方法)
class MyButton : ClickListener {override fun onClick(view: View) {// 处理点击事件}
}// 匿名内部类(SAM 转换)
button.setOnClickListener { view ->// 处理点击事件
}

三、集合与 Lambda 表达式

1. 集合操作

Java

// 创建列表
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");// 遍历
for (String name : names) {System.out.println(name);
}// 过滤和映射
List<String> filteredNames = new ArrayList<>();
for (String name : names) {if (name.length() > 3) {filteredNames.add(name.toUpperCase());}
}

Kotlin

// 创建不可变列表
val names = listOf("Alice", "Bob")// 遍历(更简洁)
names.forEach { name ->println(name)
}// 过滤和映射(函数式风格)
val filteredNames = names.filter { it.length > 3 }.map { it.uppercase() }
2. Lambda 表达式

Java

// 传统匿名内部类
button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show();}
});// Java 8+ Lambda
list.sort((a, b) -> a.compareTo(b));

Kotlin

// 简洁的 Lambda
button.setOnClickListener {Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show()
}// 集合操作
val sortedList = list.sortedBy { it }

四、Android 开发特有功能

1. 布局文件绑定

Java

// findViewById(繁琐)
TextView textView = findViewById(R.id.textView);
textView.setText("Hello");

Kotlin

// View Binding(自动生成),需要加载Bind插件
binding.textView.text = "Hello"// 或者使用 Kotlin Android Extensions(已弃用)
textView.text = "Hello"
2. 协程(异步编程)

Java

// 使用线程池和回调
Executors.newSingleThreadExecutor().execute(new Runnable() {@Overridepublic void run() {// 后台任务final String result = fetchData();// 回到主线程runOnUiThread(new Runnable() {@Overridepublic void run() {textView.setText(result);}});}
});

Kotlin

// 使用协程(结构化并发)
lifecycleScope.launch {val result = withContext(Dispatchers.IO) {fetchData()  // 耗时操作}textView.text = result  // 自动在主线程执行
}
3. 扩展函数

Java

// 需要创建工具类
public class ViewUtils {public static void showToast(Context context, String message) {Toast.makeText(context, message, Toast.LENGTH_SHORT).show();}
}// 使用
ViewUtils.showToast(context, "Message");

Kotlin

// 直接扩展 View 类
fun View.showToast(message: String) {Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
}// 使用
button.showToast("Clicked")

五、空安全与异常处理

1. 空安全特性

Java

// 手动判空链
String result = "";
if (user != null && user.getProfile() != null) {result = user.getProfile().getName();
}

Kotlin

// 安全调用链
val result = user?.profile?.name ?: "Default"
2. 异常处理

Java

// 传统 try-catch
try {int value = Integer.parseInt(text);
} catch (NumberFormatException e) {e.printStackTrace();
}

Kotlin

// 使用 try 作为表达式
val value = try {text.toInt()
} catch (e: NumberFormatException) {0  // 默认值
}

上面知识Java和Kotlin的一部分区别的知识,还有其他的可以一边用,一边学习,

其他的知识比如kotlin没有switch,需要使用when。

六、性能与互操作性

  1. 性能
    • Kotlin 编译后的字节码与 Java 接近,性能无显著差异
    • 某些特性(如扩展函数)可能产生极轻微的性能开销
  2. 互操作性
    • Kotlin 与 Java 100% 互操作,可以混合使用
    • Kotlin 代码可轻松调用 Java 库,反之亦然

七、总结与建议

特性JavaKotlin
语法简洁性冗长,样板代码多简洁,减少 40% 以上代码量
空安全手动判空,易出错编译时强制空安全检查
函数式编程有限支持(Java 8+ Lambda)全面支持,集合操作更流畅
异步编程线程池、回调、RxJava协程(结构化并发)
Android 集成findViewById、HandlerView Binding、协程、Flow
学习曲线入门简单,高级特性复杂入门稍难,掌握后效率提升显著

建议

  • 新项目优先选择 Kotlin
  • 现有项目逐步迁移(Kotlin 与 Java 可共存)
  • 利用 Kotlin 的空安全、协程、扩展函数等特性提升开发效率

通过对比可以看出,Kotlin 在保持与 Java 兼容性的同时,提供了更现代、更安全、更高效的编程体验,是 Android 开发的首选语言。

现在从Android Java想要学习kotlin其实没有那么难,

因为现在新版本的Android Studio兼容Java和Kotlin;

Android Studio新建一个Kotlin项目代码,里面可以写Java代码也可以写Kotlin代码,

xml布局写法不变,另外Java代码可以调用到Kotlin的类,Kotlin的类也可以调用Java的代码;

另外,Kotlin的代码复制到Java的类,会提示是否转换为Kotlin的代码;

最狠的一个:Java代码可以右键一键转换成Kotlin代码(虽然不一定完全准确)。

上面的知识只是一些简单的入门知识,如果要学好kotlin需要系统的学习一下,并且进行一些实际训练。

PS:学习这东西任何时候都不算晚

相关文章:

  • Dilworth 定理 学习笔记
  • 智能危险品搬运机器人市场报告:行业趋势与未来展望
  • qt常用控件--01
  • 对于网站业务安全SCDN都能够从哪些方面进行保护?
  • Kafka协议开发总踩坑?3步拆解二进制协议核心
  • IP 风险画像网络违规行为识别
  • 语音相关-浏览器的自动播放策略研究和websocket研究
  • Kafka线上集群部署方案:从环境选型到资源规划思考
  • C#学习日记
  • 基于存储过程的MySQL自动化DDL同步系统设计
  • GNU Octave 基础教程(2):第一个 Octave 程序
  • 作为运营,需要在账号中给用户提供什么?
  • 文件管理总结
  • HCIP-数据通信基础
  • python高校运动会数据分析管理系统
  • LINUX620 NFS
  • 空壳V3.0,免费10开!
  • PAI推理重磅发布模型权重服务,大幅降低冷启动与扩容时长
  • Qi无线充电:车载充电的便捷与安全之选
  • 多相机三维人脸扫描仪:超写实数字人模型制作“加速器”
  • 公司网站英文/国外网站推广
  • 网站制作教程步骤/seo研究中心倒闭
  • 青岛北京网站建设/西安seo服务公司排名
  • 网站哪个公司做的好/网络推广都有哪些方式
  • 专业做网站费用/郑州网络营销推广公司
  • 机械网站建设方案/2023推广平台