【Android之路】kotlin和Jatpack compose
kotlin
这是一个 Android 学习初期常见的疑问,我给你从历史、语言关系、Android 开发支持三个角度讲清楚。
1. Kotlin 和 Java 的本质关系
对比 | Java | Kotlin |
---|---|---|
语言类型 | 静态类型、面向对象 | 静态类型,面向对象 + 函数式特性 |
运行平台 | JVM(Java Virtual Machine) | JVM(与 Java 共用字节码格式) |
互操作性 | —— | 100% 可与 Java 混用 |
编译结果 | .class 字节码 | .class 字节码(与 Java 相同) |
-
Kotlin 本质上是 JVM 语言
它的编译器会把.kt
文件编译成 与 Java 完全一样的 JVM 字节码。所以 Android 系统(底层是 ART 虚拟机)看到的只是普通的字节码,不关心源代码是 Java 还是 Kotlin。 -
互操作性
Kotlin 可以直接调用 Java 的类、方法、库,Java 也可以直接使用 Kotlin 生成的类。比如:// Kotlin val list = ArrayList<String>() list.add("Hello")
这个
ArrayList
就是标准 Java 类。反过来,Java 中也能直接调用 Kotlin 写的函数。
2. 为什么两者都能开发 Android
(1) Android 最初只支持 Java
- Android 最初(2008 年)基于 Java 开发,官方 SDK、示例、文档全是 Java。
- Google 提供的
android.jar
、Activity
、View
等框架 API 其实是 Java 写的。
(2) Kotlin 的出现与 Google 官方支持
- JetBrains(IntelliJ 的公司)2011 年推出 Kotlin,目标:更简洁、更安全(空指针安全)、更现代化。
- 2017 年 Google 在 I/O 大会上宣布 Kotlin 成为 Android 官方一等语言(first-class language)。
- 2019 年 Google 更是提出 “Kotlin first”:新功能和新库优先适配 Kotlin。
现在:Android Studio 内置对 Kotlin 的编译和语法支持,新项目默认就是 Kotlin。
3. 开发体验差异(为什么现在很多人用 Kotlin)
特性 | Java | Kotlin |
---|---|---|
空指针 | 容易 NPE | 类型系统自带空安全(? /!! ) |
数据类 | 需要写 getter/setter/toString | data class 一行生成 |
Lambda | 较繁琐 | 原生简洁 |
协程 | 无官方支持 | 官方标准库直接支持(suspend 、Flow ) |
模板代码量 | 多 | 少 |
Android 支持 | 完善 | Google 优先支持 |
例子:定义一个简单的用户类
// Java
public class User {private String name;private int age;public User(String name, int age) { this.name = name; this.age = age; }public String getName() { return name; }public int getAge() { return age; }@Overridepublic String toString() {return "User{name='" + name + "', age=" + age + "}";}
}
// Kotlin
data class User(val name: String, val age: Int)
4. 初学者该怎么选
-
现在推荐:直接学 Kotlin
- Android Studio、Google 文档、Jetpack Compose 都是 Kotlin 优先。
- 代码量少、易读、避免空指针。
-
了解一点 Java 仍然必要
- 大量老项目和库是 Java 写的。
- Android 底层 API 文档仍以 Java 为主,阅读源码时更容易。
学习顺序建议:
- 入门 Android → 用 Kotlin 写项目。
- 遇到第三方库或老代码 → 能看懂 Java。
- 如果你要面试,Java 基础(OOP、集合、泛型、线程)也得掌握。
🚀 总结
- Kotlin ≈ Java 的“现代升级版”,但仍然运行在 JVM 上,与 Java 完全兼容。
- Android 同时支持 Java 和 Kotlin,但官方强烈推荐 Kotlin,新项目几乎都用它。
- 对初学者:直接用 Kotlin 开发 UI 和业务逻辑,同时保持能读懂 Java 代码。
在Android studio中创建第一个应用
创建提醒
- 在创建的时候,可能会因为网络的问题,导致下载时间过长,这里需要耐心等待
- 在IDE加载完毕之后,将预览打开,方便进行开发
相关函数的讲解
onCreate()
简单来说,就是在app打开的时候,onCreate()
自动运行,进行相关数据的初始化。下面取自谷歌开发者网站:
onCreate() 函数是此 Android 应用的入口点,并会调用其他函数来构建 UI。在 Kotlin 程序中,main()
函数是执行的入口点/起点。在 Android 应用中,则是由 onCreate() 函数来担任这个角色。onCreate() 函数中的 setContent() 函数用于通过可组合函数定义布局。任何标有 @Composable
注解的函数都可通过 setContent() 函数或其他可组合函数进行调用。该注解可告知 Kotlin 编译器 Jetpack
Compose 使用的这个函数会生成 UI。
@Composable
这个函数注释将函数变为可组合的函数,表明这是一个 Compose UI 组件。这个注释的函数用于描述组件的外观,并且其内涵了很多组件来构建我们想要的界面。
可组合函数
可组合函数
在 Compose 中,可组合函数是界面的基本构建块。可组合函数:
- 描述界面中的某一部分。
- 不会返回任何内容。
- 接受一些输入并生成屏幕上显示的内容。
函数命名
被@Composable
注释的函数,必须命名为pascal
命名法,也就是首字母必须大写的驼峰命名法。
@Preview
这个函数注释能够让我们在IDE中预览函数的样式
代码介绍
class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)// 让界面延伸到状态栏/导航栏,配合 Material3 Edge-to-Edge 风格enableEdgeToEdge()// 设置界面的 Compose 内容setContent {// 应用自定义的主题(颜色、排版等)MyLearningApplicationTheme {// Scaffold 是 Material Design 的基础布局容器,可放置 TopBar、BottomBar 等Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->// innerPadding 会自动为内容腾出系统栏/工具栏的空间Greeting(name = "Android",modifier = Modifier.padding(innerPadding))}}}}
}
调用关系
App 启动 →MainActivity.onCreate()├─ enableEdgeToEdge()└─ setContent { … }└─ MyLearningApplicationTheme { … } // 设置主题└─ Scaffold(...) { innerPadding -> // 布局容器└─ Greeting(name="Android") // 显示文本└─ Text("Hello Android!")