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

【Android之路】kotlin和Jatpack compose

kotlin

这是一个 Android 学习初期常见的疑问,我给你从历史、语言关系、Android 开发支持三个角度讲清楚。


1. Kotlin 和 Java 的本质关系

对比JavaKotlin
语言类型静态类型、面向对象静态类型,面向对象 + 函数式特性
运行平台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.jarActivityView 等框架 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)

特性JavaKotlin
空指针容易 NPE类型系统自带空安全(?/!!
数据类需要写 getter/setter/toStringdata class 一行生成
Lambda较繁琐原生简洁
协程无官方支持官方标准库直接支持(suspendFlow
模板代码量
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!")
http://www.dtcms.com/a/410070.html

相关文章:

  • 渗透测试入门:从网络抓包到Web安全基础
  • 阿里云CDN加速流量消耗大原因:动态加速
  • 云栖2025 | 阿里云自研大数据平台 ODPS 重磅升级:全面支持AI计算和服务
  • FreeRTOS内存分配与STM32内存布局详解
  • 外贸建站的公司wordpress如何汉化主题
  • phpcms网站系统 技术方案 系统框架图网站系统开发团队简介
  • vue3+ts项目实现陕西省3d地图
  • leetcode_146 LRU缓存
  • Python常用自动化测试框架—Pytest详解
  • 郑州英文网站建设软件开发平台搭建
  • 在 C# .NETCore 中使用 MongoDB(第 3 部分):跳过、排序、限制和投影
  • 建设网站入什么科目最大的商标交易平台
  • esp32墨水屏学习3
  • DOM(二):事件监听、事件类型、事件对象、环境对象、回调函数、Tab栏切换
  • net6.0 WebApi 中使用 Entity Framework Core + Sqlite
  • 前端2.0
  • PostIn入门到实战(4) - 如何使用接口Mock尽早满足前端开发需求
  • 【论文阅读 | TGRS 2025 | DHANet:用于多模态无人机目标检测的双流分层交互网络​​】
  • 零知IDE——STM32F407VET6与ADS1115模数转换器实现多通道数据采集显示系统
  • 门户网站 商城系统青岛建站开发
  • 从零学算法39
  • BIKE算法:后量子密码标准化竞赛中的编解码候选者
  • 【字节跳动】LLM大模型算法面试题:什么是 LangChain?LangChain 包含哪些 核心概念?
  • 降低fullgc停顿时间
  • BatchNorm2d详细原理介绍
  • Spring Boot WebSocket:使用 Java 构建多频道聊天系统
  • 中堂镇仿做网站软文网站有哪些
  • Android 应用配置跳转微信小程序
  • Word和WPS文字中的自动编号和文字间距过大怎么办?
  • 京东零售张泽华:从营销意图到购买转化,AI重塑广告增长