自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

9年Android老兵,专注车载系统与移动架构。深耕Java/Kotlin,玩转Lua/Python。擅长百度/高德地图深度定制,分享拒绝浅尝辄止的硬核干货。

专注智能座舱与车载Android开发。9年技术沉淀,从手机端到车机端,深谙Android系统架构。擅长百度/高德地图导航集成、Vehicle HAL层对接及Kotlin多平台开发。在这里分享车载开发那些事儿与架构演进之路。

  • 博客(129)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 第一个 Kotlin 程序:main 函数、运行配置和编译产物

本文介绍了 Kotlin 程序的入口机制和编译运行过程。主要内容包括: Kotlin 程序入口是 main 函数,支持两种形式:无参版本和带命令行参数的版本 解释了 main 函数的特殊性和执行机制,说明其与普通函数的区别 介绍了标准输出函数 println 和 print 的作用 重点分析了 Kotlin 文件编译后的类名生成规则,说明文件名与生成类的关系 讲解了包声明的作用和规范,以及包名对完整类名的影响 文章通过流程图和示例代码,展示了从源码到运行的全过程,帮助理解 Kotlin 程序的底层运行机制。

2026-07-19 23:56:14 288

原创 开发环境搭建:IDEA、JDK、Gradle 和 Kotlin 插件

本文详细介绍了Kotlin/JVM开发环境搭建的关键要点,重点分析了各组件间的层级关系。主要内容包括: 环境架构解析:从IDE到最终程序运行的完整链路,强调Gradle、Kotlin插件和JDK的分层协作关系 工具清单:列出JDK、IntelliJ IDEA、Gradle Wrapper等核心组件及其作用 JDK配置要点:区分本机JDK、IDE JDK、Gradle JVM和Java toolchain的不同作用 IntelliJ IDEA使用建议:版本选择、JDK配置注意事项。

2026-07-19 23:55:28 28

原创 JDK、Kotlin、JVM 和 Android 的关系

本文摘要: 本文系统梳理了Kotlin与JDK、JVM、Android的关系。主要内容包括:1)Kotlin/JVM和Java最终都编译为JVM字节码.class文件,因此可以实现互操作;2)Android通过D8工具将.class转换为DEX字节码,由ART而非JVM执行;3)JDK包含开发工具和运行环境,JVM负责执行字节码;4)Kotlin顶层函数会被编译为静态方法放入自动生成的类中;5)Kotlin标准库与JDK标准库是互补关系,前者提供Kotlin风格API,后者提供JVM平台能力。

2026-07-13 21:30:17 147

原创 Android 全局架构与源码阅读方法

本文是Android系统架构与源码阅读方法的开篇章,重点帮助开发者建立全局视角。文章首先指出仅学习API层面的开发会导致对Android运行机制理解不足,无法解决Activity生命周期、Binder通信等核心问题。

2026-07-13 21:22:13 23

原创 Android开发学习链路和教程规划

这是一套系统化的Android开发教程,采用全新链路式教学法,从Linux内核到应用上线全流程解析。教程特色在于每个知识点都涵盖底层原理、源码链路、使用方法和工程治理四大维度,确保开发者获得完整认知体系。课程分为三个阶段:底层运行环境(Linux内核、Binder、Zygote等)、项目构建与运行时(Gradle、APK安装、资源系统等)、四大组件与UI开发(Activity、View、Jetpack等)。

2026-07-12 23:42:58 34

原创 Kotlin 教程路线、学习方法和能力地图

Kotlin学习路线与能力地图摘要 Kotlin作为现代编程语言,适用于Android、JVM后端、脚本工具等多场景开发。学习重点在于理解其类型系统、标准库和工程化能力,而非单纯语法简化。

2026-07-12 23:23:31 129

原创 从零开始学Java:第40章 Java学习复盘和后续方向

如果你是从第1章一路学到这里,你经历的不是“把 Java 语法看了一遍”,而是从一个完全不知道 Java 程序怎么运行的人,逐步写到了一个有结构、有对象、有集合、有异常、有文件存储、有测试、有重构意识的小型项目。 这件事比背 API 更重要。

2026-06-30 21:15:19 639

原创 从零开始学Java:第39章 测试和重构

本章系统讲解了测试与重构在Java项目中的实践应用。首先明确了测试的核心价值——验证业务规则、边界情况和异常流程,而非检查语法错误。文章详细介绍了测试的分类(工具类测试、业务服务测试、文件存储测试)、JUnit 5的基本写法、测试命名规范以及Arrange-Act-Assert三段式结构。

2026-06-30 13:26:08 272

原创 从零开始学Java:第38章 文件存储和异常处理

本章将学习管理系统从内存存储升级为CSV文件存储,实现数据持久化。

2026-06-30 13:19:25 508

原创 从零开始学Java:第37章 用户和课程模块

本章详细介绍了学习管理系统中用户和课程模块的完整实现,包括数据模型设计、业务规则定义、服务层实现、命令行交互和单元测试。

2026-06-30 10:46:02 189

原创 从零开始学Java:第36章 项目结构搭建

本章摘要:本章专注于搭建“命令行学习管理系统”的项目骨架,而非一次性实现所有功能。通过创建清晰的包结构(app、model、service、store、util、exception),实现分层架构,确保代码职责分离。主要内容包括:使用Maven管理项目依赖、设计核心领域对象(User、Course、Enrollment)、实现内存版数据存储、编写业务服务层、创建命令行交互界面,并加入基础测试。本章目标是建立一个可编译、可运行、易于扩展的基础框架,为后续功能开发奠定坚实基础。

2026-06-30 09:01:37 439

原创 从零开始学Java:第35章 综合项目需求分析:命令行学习管理系统

摘要 本文介绍了一个Java基础综合项目——命令行学习管理系统的需求分析。项目通过管理用户、课程及报名关系,整合Java基础、面向对象、集合、文件等知识点。核心实体包括User、Course和Enrollment,采用分层架构(model/service/store/app),数据存储使用CSV文件。项目包含用户注册、课程添加、报名管理等基础功能,重点关注业务规则验证和异常处理。强调控制项目范围的重要性,并制定了从模型到命令行菜单的七步实现计划。

2026-06-29 23:07:00 240

原创 从零开始学Java:第34章 第五阶段项目:接口版学生管理系统

本文介绍了一个接口版学生管理系统的Java实现,采用分层架构设计。系统支持学生信息的增删改查及按成绩排序功能。项目分为模型层(Student)、数据访问层(StudentRepository接口及其JDBC和HTTP实现)、业务逻辑层(StudentService)和应用入口。通过面向接口编程,实现了数据存储的灵活性(可本地数据库或远程HTTP服务)。模型类负责字段合法性校验,Service处理业务逻辑,Repository抽象数据访问细节。

2026-06-29 23:06:10 194

原创 从零开始学Java:第33章 JVM 基础:理解 Java 程序在内存里如何运行

对象在新生代。 新生代 GC 频繁但快。 熬过几次新生代 GC 的对象晋升到老年代。 老年代 GC 不频繁但慢。 所以写代码时: 避免创建大量临时对象。 避免在循环里创建大对象。 十七、finalize 的坑 finalize() 是一个在对象被 GC 前可能被调用的方法。 不要依赖它: 不保证一定执行。 执行时间不确定。 可能影响 GC 性能。 可能让对象复活。 正确的资源释放: 实现 AutoCloseable。 用 try-with-resources。 十八、JIT 直觉 JVM 会把热点代码(频繁

2026-06-29 23:05:18 456

原创 从零开始学Java:第32章 数据库和 JDBC:让 Java 程序操作结构化数据

这一章先讲关系型数据库和 JDBC。JDBC 是 Java Database Connectivity,它是 Java 访问数据库的标准 API。

2026-06-29 23:04:05 182

原创 从零开始学Java:第31章 网络和 HTTP:让 Java 程序和外部服务通信

摘要 本章介绍Java程序如何通过HTTP与外部服务通信。主要内容包括: HTTP基本概念:客户端-服务器模型、请求响应结构、URL组成、HTTP方法和状态码 Java 11+提供的HttpClient使用:发送GET/POST请求,设置超时和请求头 实际开发注意事项:状态码处理、JSON序列化/反序列化、超时设置 建议封装工具方法处理常见HTTP交互场景,提高代码复用性 文章通过具体代码示例,展示了从基础请求到完整JSON数据处理的完整流程,强调网络编程中的异常处理和超时机制的重要性。

2026-06-29 23:02:28 283

原创 从零开始学Java:第30章 并发安全:多个线程同时改数据时,程序还能不能正确

并发安全问题与解决方案 本文介绍了多线程编程中的并发安全问题及其解决方案。主要内容包括: 并发问题根源:多个线程同时读写共享变量会导致竞态条件,如计数器示例中count++操作的非原子性导致结果错误。 synchronized解决方案:使用synchronized修饰方法或代码块,通过对象锁保证同一时间只有一个线程能执行临界区代码。 volatile关键字:解决变量可见性问题,但不保证复合操作的原子性。 原子类:如AtomicInteger提供线程安全的原子操作,适合简单计数场景。

2026-06-28 14:29:43 333

原创 从零开始学Java:第29章 多线程基础:让程序同时做多件事

摘要:本章介绍了Java多线程编程的基础知识。首先解释了进程和线程的概念,进程是运行中的程序,线程是进程内的执行路线。通过继承Thread类或实现Runnable接口可以创建线程,其中更推荐使用Runnable方式。重点区分了start()(启动新线程)和run()(普通方法调用)的区别。还讲解了线程命名、sleep()暂停线程、join()等待线程结束等基本操作,并通过下载任务的例子展示了多线程的实际应用。最后指出多线程虽能提高效率,但也带来执行顺序不确定、调试困难等问题,为后续讲解线程安全做铺垫。

2026-06-28 14:28:46 231

原创 从零开始学Java:第28章 第四阶段项目:文件版图书管理系统

文件版图书管理系统项目摘要 本项目是Java编程训练第四阶段综合项目,目标是开发一个基于CSV文件存储的命令行图书管理系统。系统实现了图书增删、读者注册、借还书等核心功能,重点训练工程化能力: 分层架构:采用MVC模式,分离业务对象(model)、业务流程(service)和文件存储(store)层 数据持久化:通过CSV文件保存图书、读者和借阅记录数据,解决程序退出后数据丢失问题 完整性设计:包含数据验证、异常处理、CSV解析和单元测试等工程实践

2026-06-28 14:27:38 241

原创 从零开始学Java:第27章 调试、日志和单元测试:让问题能被定位、复现和验证

本章系统讲解了程序开发中的三大核心能力:调试、日志和单元测试。调试部分介绍了如何使用IDE断点逐步追踪代码执行路径,分析变量状态;日志模块强调通过分级记录关键业务信息,实现运行期问题追踪;单元测试则通过JUnit框架演示如何用代码验证函数行为,确保修改安全。三者共同构建了从问题定位、复现到验证的完整闭环,将编程从"试运气"提升为"有依据开发"。文中特别指出应避免日志泄露敏感信息,并提供了测试异常处理的实用技巧。

2026-06-28 14:26:35 219

原创 从零开始学Java:第26章 Maven 和 Gradle 入门:让构建、依赖和测试自动化

本文摘要(150字): Maven和Gradle是Java项目的自动化构建工具,解决了手动编译和管理依赖的痛点。Maven通过标准化的项目结构(如src/main/java)和pom.xml配置文件,实现了依赖管理、编译、测试和打包的自动化流程。关键概念包括:坐标定位依赖(groupId:artifactId:version)、生命周期阶段(compile→test→package)和作用域(scope)。Gradle采用类似结构但使用Groovy DSL配置。两者都支持Wrapper机制确保构建环境一致性

2026-06-28 14:24:49 225

原创 从零开始学Java:第25章 Java 项目结构:从一堆 `.java` 文件到可维护工程

摘要 本文讲解了Java项目从简单.java文件到工程化组织的演进过程。主要内容包括: 默认包的局限性:随着项目规模扩大,默认包会导致类名冲突、模块边界不清晰等问题。 包与目录结构:介绍了包名与目录的对应关系,强调了包名应遵循"公司域名反写+项目名+模块"的命名规范。

2026-06-27 00:08:49 322

原创 从零开始学Java:第24章 文本、CSV 和 JSON 的读写:把对象变成文件,也把文件变回对象

这篇文章介绍了如何在Java中处理对象与文件之间的转换,重点讲解了三种常见的数据格式:普通文本、配置文件和CSV。文章首先强调了文件读写与数据格式的区别,指出普通文本适合人类阅读但不适合程序解析。随后通过示例展示了如何实现一个简单的配置文件读取器,并详细分析了CSV格式的优缺点,特别指出直接使用split()方法处理CSV的局限性,如无法正确处理包含特殊字符的字段。整篇文章强调将文件读写、格式转换和业务对象分层处理的编程理念,为结构化数据存储提供了实用指导。

2026-06-27 00:06:33 291

原创 从零开始学Java:第23章 文件和 IO:让程序把数据保存下来

文章摘要 本章介绍了Java中的文件IO操作,重点讲解了如何持久化保存程序数据。主要内容包括: 文件IO的基本概念:解释了内存数据易失性的问题,提出文件存储作为基础解决方案。 核心API使用:详细介绍了Path类表示文件路径的方法,以及Files工具类的常用操作。 文件读写技术:演示了writeString()和readString()进行完整文本读写的方法,以及追加写入的实现。 编码与异常处理:强调必须指定字符编码(如UTF-8),并妥善处理可能出现的IO异常。

2026-06-27 00:05:47 331

原创 从零开始学Java:第22章 异常处理:让程序面对错误时有章法

第22章 异常处理:让程序面对错误时有章法 本章主要讲解了Java中的异常处理机制,摘要如下: 异常的本质:异常是Java表示程序运行中出现问题的对象,用于中断正常流程并传递错误信息。 异常与错误码的区别:相比返回错误码,异常能携带更丰富的错误信息,强制处理,并且不会因调用方疏忽而被忽略。

2026-06-27 00:05:25 532

原创 从零开始学Java:第21章 第三阶段项目:联系人管理器

本文介绍了如何开发一个联系人管理器项目,整合Java集合框架、泛型、日期时间等知识点。项目功能包括联系人增删改查、标签管理、搜索排序等。核心设计包括:使用Map以手机号为键存储联系人,Set保存不重复标签,List处理排序结果。文章详细说明了类结构设计(Contact、ContactManager等)、手机号规范化处理、业务规则实现(如非空校验、标签去重)以及项目组织方式。通过这个实战项目,读者能理解如何将分散的Java知识点组合成完整应用。

2026-06-27 00:04:52 288

原创 从零开始学Java:第20章 Lambda 和 Stream:让集合处理更像数据流水线

这篇文章摘要(149字): Java集合处理新范式:Lambda与Stream详解 文章系统介绍了Java 8引入的Lambda表达式和Stream API。Lambda本质是简化函数式接口实现,通过"(参数)->方法体"语法替代匿名内部类。核心讲解了四种常用函数式接口:Predicate(条件判断)、Consumer(消费数据)、Function(数据转换)和Supplier(数据提供)。Stream API则构建数据处理流水线,配合filter、map、sorted等操作实现声明式集合处理。

2026-06-26 00:17:39 154

原创 从零开始学Java:第19章 常用类:字符串、包装类型、数学工具和日期时间

本文摘要:本章介绍了Java编程中常用的核心类库,包括字符串处理、包装类型、数学工具和日期时间类。重点讲解了String类的不可变性、字符串比较必须用equals()而非==、StringBuilder在循环拼接时的优势、包装类型与基本类型的区别及自动装箱拆箱注意事项、精确计算时BigDecimal的使用方法,以及Java 8引入的LocalDate等日期时间类。通过实际场景如字符串拼接、金额计算和借阅期限判断等案例,帮助开发者掌握这些日常编程必备工具类的正确使用方式。

2026-06-26 00:16:18 269

原创 从零开始学Java:第18章 泛型:让容器和方法更安全

文章摘要 本章详细讲解了Java泛型的概念与应用。首先通过原始类型集合的危险性案例,展示了未使用泛型时容易出现的类型转换错误。然后介绍了泛型如何通过类型参数(如List<String>)在编译期发现类型错误,提高安全性并减少强制类型转换。文章还解释了Map的双参数泛型、基本类型与包装类的使用区别,并演示了如何自定义泛型类(如Box<T>)。最后提到类型参数命名可以自定义,为后续更复杂的泛型使用奠定了基础。泛型的核心价值在于将运行时错误提前到编译期发现,使代码更安全可靠。

2026-06-26 00:14:57 244

原创 从零开始学Java:第17章 集合进阶和排序:安全删除、Iterator、Comparable 和 Comparator

文章摘要 本章深入探讨集合进阶操作,重点讲解四个核心知识点: Iterator遍历器:提供安全遍历和删除集合元素的方式,特别适合在遍历时删除元素,避免ConcurrentModificationException异常。正确使用iterator.remove()可确保集合状态一致。 删除陷阱:解释了正向遍历List删除元素会导致数据跳过的问题,以及增强for循环直接删除会抛出异常的原因,推荐使用Iterator或倒序删除。 Comparable接口:让对象实现自然排序规则(如按成绩排序学生)。

2026-06-26 00:12:57 346

原创 从零开始学Java:第16章 Set、Map 和数据查找:从遍历查找走向按 key 定位

摘要 本章介绍了Set和Map数据结构,用于解决List在查找时的性能问题。Set关注数据的唯一性,常用HashSet实现,其add方法能自动去重并返回操作结果。Set适合去重、存在性判断等场景。Map则通过key-value映射实现快速查找。与List不同,Set和Map不关注顺序,而是优化了查找效率,特别适合处理大量数据时的存在性检查和快速定位需求。

2026-06-26 00:11:35 150

原创 从零开始学Java:第15章 数组和 List:从固定容器到动态数据集合

本文摘要: 本章探讨数组和动态集合List的使用场景及转换。首先肯定数组的价值,指出其在固定数量数据场景下的优势,如一周温度、棋盘等。详细解析数组的核心概念,包括默认值、遍历方式等,特别强调引用类型数组的null默认值问题。通过学生姓名管理案例,展示数组动态增删元素时需要手动维护size的复杂性。最后介绍ArrayList如何封装这些底层操作,简化动态数据管理,为下一章引入集合框架做铺垫。全文注重从实际问题出发,帮助读者理解不同数据结构的适用场景。

2026-06-25 19:26:33 366

原创 从零开始学Java:第14章 第二阶段项目:图书和借阅模型

本章通过图书借阅模型项目,系统性地练习面向对象建模。项目包含四个核心类:Book(管理图书信息和库存)、Reader(记录读者状态)、BorrowRecord(跟踪借还记录)和Library(协调业务流程)。重点展示了如何将业务实体合理封装为对象,并通过对象间协作实现借阅规则(如库存检查、重复借阅限制等)。项目采用数组而非集合框架存储对象,帮助理解对象引用的本质。通过这个案例,读者可以学习如何将零散数据组织为有边界的对象,避免将所有逻辑堆积在main方法中,为后续更复杂的系统设计奠定基础。

2026-06-25 19:19:52 204

原创 从零开始学Java:第13章 组合优于继承:更稳的对象协作方式

摘要: 本章强调组合优于继承的设计原则。继承应仅用于表达"是一个"关系(如猫是动物),而组合更适合表达"拥有"或"使用"关系(如车有发动机)。通过打印机、通知服务等案例,说明组合能提升代码灵活性(如随时切换支付策略)、减少父类膨胀,并便于测试(通过模拟对象)。关键要点:优先通过接口组合功能;避免为代码复用滥用继承;继承层次应浅且稳定。练习包括关系判断、接口设计及重构错误继承,帮助理解如何用组合构建更松耦合的系统。

2026-06-25 19:18:36 214

原创 从零开始学Java:第12章 抽象类、接口与能力边界

摘要: 本章介绍Java接口的核心概念,强调接口用于表达"能力"而非"类别"的特性。接口与抽象类的关键区别在于:接口定义行为契约(如Flyable、Payable),支持多实现;抽象类则用于共享基础状态。通过Notifier、Payment等实例,展示了面向接口编程的价值——业务代码依赖能力而非具体实现,提升系统扩展性。文章还指出接口设计应遵循"单一职责"原则,避免过大接口,并对比了接口默认方法的适用场景。最后通过日志案例演示了接口在实际开发中的应用,强调依赖抽象带来的灵活性优势。

2026-06-25 19:17:36 230

原创 从零开始学Java:第11章 继承、多态与抽象类

本文摘要:本章介绍Java继承、多态与抽象类。继承用于处理具有共同特征的类(如不同员工类型),通过extends实现,子类可重写父类方法并使用super调用父类构造器。protected修饰符允许子类访问父类成员。多态使父类引用能指向子类对象,实现动态方法绑定。抽象类通过abstract定义,包含抽象方法要求子类必须实现。继承适用于"是一个"关系(如Manager是Employee),但需注意层级过深的风险。

2026-06-25 19:16:33 272

原创 从零开始学Java:第10章 封装:让对象保护自己的规则

本章摘要:封装的核心是让对象保护自己的数据完整性。通过private字段禁止外部直接访问,在构造方法中进行初始校验,避免创建无效对象。提供有意义的业务方法(如updateScore、rename)而非简单setter,确保修改符合业务规则。用final标记不应修改的字段(如id),并通过getter谨慎暴露必要信息。最后通过银行账户案例展示了如何封装余额变更逻辑,只能通过deposit/withdraw方法操作,确保业务规则不被破坏。

2026-06-24 18:22:57 452

原创 从零开始学Java:第9章 类和对象:把数据和行为放在一起

本文介绍了面向对象编程的基本概念,重点讲解了类和对象的关系及其应用。主要内容包括: 类和对象的概念:类是模板,对象是具体实例,一个类可以创建多个对象 对象的组成:字段表示对象状态,方法表示对象行为 构造方法的使用:用于初始化对象数据 this关键字的用法:指代当前对象 对象引用的特性:变量存储的是对象引用而非对象本身 对象的集合存储:可在数组或列表中使用对象 实际应用:用面向对象方式重构了成绩统计器示例 文章通过学生成绩管理的示例,展示了如何将数据和相关行为封装在对象中,体现了面向对象编程的核心思想。

2026-06-24 18:22:05 249

原创 从零开始学Java:第8章 第一阶段项目:命令行成绩统计器

本文介绍了如何使用Java基础知识构建一个命令行成绩统计器项目。项目目标包括:输入学生人数和成绩、验证输入合法性、统计最高分/最低分/平均分/及格人数/及格率。文章先展示了一个最小功能版本,然后提出改进方案,将程序拆分为多个方法(如读取输入、验证数据、计算结果等),最后给出了完整的结构化代码实现。这个项目帮助初学者将Java基础知识(变量、循环、条件判断、方法等)综合运用到一个实际应用中。

2026-06-24 18:21:02 201

原创 从零开始学Java:第7章 方法:把复杂程序拆成小块

摘要:方法(Method)的基本概念与使用 本章介绍了Java中方法的概念和使用方式。方法是一段有名字的代码,用于将复杂程序拆分成多个逻辑块。主要内容包括: 方法的结构:返回值类型、方法名、参数列表和方法体 方法的参数和返回值:参数是方法的输入,返回值是方法的输出 return关键字的作用:返回结果和提前结束方法 方法命名规范:应表达动作,布尔返回值方法常用疑问形式。

2026-06-24 18:20:16 238

W3C使用手册

HTML使用手册W3C

2016-07-28

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除