# learning-java-basics **Repository Path**: libingquan/learning-java-basics ## Basic Information - **Project Name**: learning-java-basics - **Description**: java 开发学习记录 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-05 - **Last Updated**: 2026-04-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java 基础学习项目 一个面向 C++ 开发者的 Java 学习项目,通过对比学习的方式快速掌握 Java 核心知识。 ## 项目概述 - **Java 版本**: JDK 17+ - **构建工具**: Maven - **测试框架**: JUnit 5 - **目标读者**: 有 C++ 基础,正向 Java 转型的开发者 ## 运行指南 ### 环境要求 | 工具 | 版本要求 | 说明 | |------|----------|------| | JDK | 17+ | [下载地址](https://adoptium.net/) | | Maven | 3.6+ | [下载地址](https://maven.apache.org/download.cgi) | 安装后验证: ```bash java -version mvn -version ``` ### Maven 常用命令 | 命令 | 作用 | |------|------| | `mvn compile` | 编译源代码(生成 `target/classes`) | | `mvn test` | 编译并运行所有测试 | | `mvn clean` | 清理 `target` 目录 | | `mvn clean test` | 清理后重新编译测试 | | `mvn test -Dtest=XxxTest` | 运行指定测试类 | | `mvn test -Dtest=XxxTest,YyyTest` | 运行多个测试类 | | `mvn test -Dtest="*Test"` | 运行所有测试类 | | `mvn dependency:tree` | 查看依赖树 | ### 运行示例代码 每个示例类都有 `main` 方法,可独立运行: ```bash # 1. 先编译 mvn compile # 2. 运行示例(使用类的完全限定名) java -cp target/classes org.example.basics.s03_types_and_reference.P04StringDemo # 常用示例快速运行 java -cp target/classes org.example.basics.s01_project_structure.P01PackageVsInclude java -cp target/classes org.example.basics.s02_basic_syntax_diff.P01NoPointerDemo java -cp target/classes org.example.basics.s03_types_and_reference.P03ValueVsReference java -cp target/classes org.example.basics.s06_inheritance.P01InheritanceDemo java -cp target/classes org.example.basics.s07_interface.P01InterfaceDemo java -cp target/classes org.example.basics.s08_polymorphism.P01PolymorphismDemo java -cp target/classes org.example.collections.s01_list.P01ArrayListDemo java -cp target/classes org.example.collections.s02_set.P01HashSetDemo java -cp target/classes org.example.collections.s03_map.P02HashMapInternal java -cp target/classes org.example.collections.s04_stream.P01StreamBasic ``` ### 运行单元测试 ```bash # 运行所有测试 mvn test # 运行单个测试类 mvn test -Dtest="StringTest" mvn test -Dtest="ReferenceTest" mvn test -Dtest="CollectionTest" # 运行多个测试类 mvn test -Dtest="StringTest,ReferenceTest" # 查看详细测试输出 mvn test -Dtest="CollectionTest" -Dsurefire.useFile=false ``` ### IDE 运行 #### IntelliJ IDEA(推荐) 1. File → Open → 选择 `pom.xml` 2. 点击 "Open as Project" 3. 打开任意 `.java` 文件,右键 → Run 'P01HashSetDemo' 4. 或右键 `*Test.java` → Run 'XxxTest' 5. 快捷键:`Shift+F10` 运行上次程序 #### VS Code 1. 安装扩展:Java Extension Pack 2. 打开项目文件夹 3. 右键 `.java` 文件 → Run Java 4. 右键 `*Test.java` → Run Test ### 目录说明 | 目录 | 说明 | |------|------| | `src/main/java/` | Java 源代码 | | `src/main/resources/` | 资源文件(笔记、配置) | | `src/test/java/` | 单元测试代码 | | `target/classes/` | 编译后的 `.class` 文件 | | `target/surefire-reports/` | 测试报告 | ### 常见问题 **Q: `mvn` 命令找不到?** ```bash # 确保 Maven 已安装并配置到 PATH export PATH=$PATH:/path/to/maven/bin ``` **Q: 测试运行失败?** ```bash # 清理后重试 mvn clean test ``` **Q: 如何查看测试覆盖率?** ```bash # 添加 JaCoCo 插件到 pom.xml,然后运行 mvn test jacoco:report ``` ## 学习路线图 ``` 阶段1: 消除思维惯性 → 阶段2: OOP核心 → 阶段3: 集合框架 (已完成) (已完成) (已完成) ↓ 阶段6: 多线程 ← 阶段5: I/O ← 阶段4: 函数式编程 (规划中) (规划中) (规划中) ``` ## 已完成内容 ### 阶段1:消除思维惯性 ✅ 从 C++ 转向 Java,首先需要消除语言惯性。 | 模块 | 内容 | 示例 | |------|------|------| | s01 | 项目结构 | package vs include、import 原理 | | s02 | 语法差异 | 无指针、无全局函数、无头文件 | | s03 | 类型系统 | 基本类型、引用、值传递、String不可变 | ### 阶段2:OOP 核心 ✅ Java 是纯面向对象语言,OOP 是核心。 | 模块 | 内容 | 示例 | |------|------|------| | s04 | 类与对象 | static vs 实例方法、构造器 | | s05 | 封装 | 访问控制、getter/setter、JavaBean | | s06 | 继承 | 单继承、super、@Override | | s07 | 接口 | 多实现、default方法、函数式接口 | | s08 | 多态 | 向上/向下转型、instanceof、抽象类 | | s09 | 泛型 | 类型擦除、通配符、PECS原则 | ### 阶段3:集合框架 ✅ Java 集合是日常开发中使用最频繁的 API。 | 模块 | 内容 | 示例 | |------|------|------| | s01_list | List | ArrayList、LinkedList、迭代器、fail-fast | | s02_set | Set | HashSet、TreeSet、hashCode+equals契约 | | s03_map | Map | HashMap、TreeMap、底层结构(数组+链表/红黑树) | | s04_stream | Stream | filter/map/reduce、惰性求值、分组、并行流 | ## 规划中内容 ### 阶段4:函数式编程 - Lambda 表达式 - 方法引用 - 函数式接口 - Optional ### 阶段5:I/O - 字节流/字符流 - 装饰器模式 - NIO (Buffer/Channel) ### 阶段6:多线程 - Thread/Runnable/Callable - synchronized/volatile - JUC 并发工具 - 线程池 ## 项目结构 ``` src/main/java/org/example/ ├── basics/ # Java 基础 │ ├── s01_project_structure/ # 项目工程结构 │ ├── s02_basic_syntax_diff/ # 语法差异 │ ├── s03_types_and_reference/ # 类型与引用 │ ├── s04_class_and_object/ # 类与对象 │ ├── s05_encapsulation/ # 封装 │ ├── s06_inheritance/ # 继承 │ ├── s07_interface/ # 接口 │ ├── s08_polymorphism/ # 多态 │ └── s09_generic/ # 泛型 ├── collections/ # 集合框架 │ ├── s01_list/ # List 家族 │ ├── s02_set/ # Set 家族 │ ├── s03_map/ # Map 家族 │ └── s04_stream/ # Stream API ├── io/ # I/O (规划中) └── threads/ # 多线程 (规划中) src/test/java/org/example/ # 单元测试 ``` ## C++ vs Java 核心差异速查 | 主题 | C++ | Java | |------|-----|------| | 内存管理 | 手动 new/delete | GC 自动回收 | | 头文件 | .h + .cpp 分离 | 所有代码在 .java 中 | | 全局函数 | 可以独立于类 | 所有方法必须在类中 | | 继承 | 多继承 | 单继承 + 多接口 | | 字符串 | std::string (可变) | String (不可变) | | 字符串比较 | == 比较内容 | == 比较引用,equals 比较内容 | | 异常 | 可抛出任意类型 | 分 checked/unchecked | | 线程池 | 需第三方库 | 内置 ExecutorService | ## 推荐 IDE - **IntelliJ IDEA** — 最推荐的 Java IDE,智能提示强大 - **VS Code** — 轻量级,安装 Java Extension Pack - **Eclipse** — 老牌 IDE,插件丰富 ## 参考资料 - [Java 官方文档](https://docs.oracle.com/javase/) - [Maven 中央仓库](https://mvnrepository.com/) - [JUnit 5 文档](https://junit.org/junit5/docs/current/user-guide/)