CodeGym
促销
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题

课时

  • 评论
  • 关于我们
开始
开始学习
立即开始学习
  • 我的进度
  • 课程
  • 任务地图
  • 课程
  • module-info.java:语法、创建模块

    JAVA 25 SELF
    等级 60,课时 1
    讲解什么是 module-info.java 文件、它在项目中的位置,以及如何使用关键字 module 声明模块。学习通过 exports 导出 API、通过 requires 声明依赖,并了解其他指令( opens、 uses、 provides ... with)。本讲包含示例、模块命名规则、项目结构的实用解析,以及模块化构建中的常见错误。
    可用
  • 通过模块实现封装:导出与导入

    JAVA 25 SELF
    等级 60,课时 2
    Java 9+ 如何在类和包之上引入模块化封装:即便是 public 类也会被隐藏,除非所在包在 module-info.java 中通过 exports 显式开放。我们来拆解如何用 requires 声明依赖、如何用 exports to 限制可见性、 module 级别与 private/ public 有何不同,以及哪些编译错误(例如,“package ... is not visible”、“cannot access ...”)会提示你忘了写 exports 或 requires。
    可用
  • 将项目拆分为模块:最佳实践

    JAVA 25 SELF
    等级 60,课时 3
    关于 Java 模块化架构的实用指南:何时以及为何将代码拆分为模块,常见的拆分方案(“洋葱型”架构、按 api/ impl 分离、测试模块),通过 module-info.java 与关键字 requires/ exports 配置依赖,含 3 个模块的项目示例,与 Maven/ Gradle 和 IntelliJ IDEA 的集成,以及常见错误的解析(循环依赖、未导出的包、错误的 --module-path)。
    可用
  • 多模块项目的构建:Maven、Gradle、IDEA

    JAVA 25 SELF
    等级 60,课时 4
    如何构建 Java 模块化项目: classpath 与 module-path 的区别,何时使用标志 --module-path,如何在 Maven 和 Gradle 中配置多模块结构,以及如何在 IntelliJ IDEA 中运行一切。我们将展示包含 module-info.java 的模块结构,通过 requires/ exports 声明依赖、插件配置,以及构建时的常见错误。
    可用
  • ProcessBuilder — 启动外部进程

    JAVA 25 SELF
    等级 61,课时 0
    讲解如何在 Java 中使用 ProcessBuilder 类启动外部命令和工具:它与 Runtime. getRuntime(). exec() 相比有哪些优势,如何通过 directory() 设置工作目录,通过 environment() 配置环境变量,以及如何通过 start()、 waitFor()、 getInputStream()/ getErrorStream()/ getOutputStream() 管理进程。还将讨论跨平台性( cmd.exe/ ls)、如何处理 stdout/ stderr,以及常见错误。
    可用
  • 读取进程输出,操作 stdin/stdout

    JAVA 25 SELF
    等级 61,课时 1
    在 Java 中与外部进程交互的实践:如何通过 stdout 的 Process.getInputStream() 读取输出,通过 Process.getErrorStream() 捕获来自 stderr 的错误,通过 Process.getOutputStream() 向 stdin 写入数据,以及使用便捷方法 inputReader()/ errorReader()/ outputWriter()。我们还将讲解诸如 java -version 等命令的特殊性、为避免 deadlock 而并行读取两个流、编码处理( "UTF-8"),以及与 Python 脚本之间的小型桥接。
    可用
  • 进程生命周期管理

    JAVA 25 SELF
    等级 61,课时 2
    在 Java 中管理外部进程的实践:通过 waitFor() 等待结束(包括超时),读取退出码,通过 destroy()/ destroyForcibly() 正确停止,防止挂起和“僵尸”进程,同时别忘了处理输出流和异常。讲解跨平台细节与常见错误。
    可用
  • 与进程的交互式通信

    JAVA 25 SELF
    等级 61,课时 3
    在本讲中,我们将讲解如何在 Java 中与外部程序建立“实时”对话:向 stdin 写入、从 stdout 和 stderr 读取,避免相互阻塞( deadlock),使用 ExecutorService 并行处理输出,正确关闭流,并通过 ProcessBuilder 管理 Process 的生命周期。我们将查看使用 Python 交互式脚本和 bc 工具的示例,并分析缓冲以及必须调用 flush() 的那些坑。
    可用
  • 处理进程时的常见错误解析

    JAVA 25 SELF
    等级 61,课时 4
    面向 Java 外部进程稳定性的实用指南:如何避免因未读取的流 stdout/ stderr 导致的卡死,正确设置输出编码(例如 UTF-8、 CP866),考虑命令的跨平台差异( ls vs dir),通过 process.exitValue() 处理权限与退出码,关闭资源防止泄漏,并避免交互式的相互阻塞。我们将讲解对 ProcessBuilder 的合理使用、并行读取流(线程/ ExecutorService)、通过 process.destroy() 的正确终止,以及借助 File.separator 的通用路径处理。
    可用
  • 反射入门:Class 类及其用途

    JAVA 25 SELF
    等级 62,课时 0
    我们将弄清什么是 Java 中的反射,以及框架和工具为什么需要它;了解反射的核心—— Class 对象如何工作,以及如何通过 .class、 getClass() 和 Class.forName() 获取它。还会讨论何时应该使用反射、何时最好不用,看看如何获取元数据(名称、包、父类、接口)的示例,拆解一个小工具“这是什么类?”,以及常见错误( ClassNotFoundException、性能、安全性)。
    可用
  • 获取类、字段、方法的信息

    JAVA 25 SELF
    等级 62,课时 1
    本讲讲解 Java 的反射:如何通过 Class API 获取字段( getFields()/ getDeclaredFields())、方法( getMethods()/ getDeclaredMethods())、构造器( getConstructors()/ getDeclaredConstructors())和注解( getAnnotations())的信息。通过 Modifier 获取修饰符( public、 private、 protected、 static、 final),解释“public 与 declared”的差异,动手做一个迷你类检查器工具,并查看一张可视化示意图。
    可用
  • 反射的安全性、限制与替代方案

    JAVA 25 SELF
    等级 62,课时 2
    本讲将解析反射的风险与限制:通过 setAccessible( true) 绕过封装、尝试修改 final 字段,以及为何由于 JVM 优化这很危险; SecurityManager 的命运,以及模块化系统(Java 9+)如何导致 InaccessibleObjectException。我们还会讨论性能损失与类型安全问题、现代替代方案( record、 sealed、pattern matching、APT、DI)以及最佳实践。最后——给出一个使用 JVM 参数 --add-opens 的实战示例。
    可用
  • 1
  • ...
  • 26
  • 27
  • 28
  • 29
  • 30
Learn
  • 注册
  • Java 课程
  • 任务帮助
  • 定价
  • Java 语法
社区
  • 用户
  • 文章
  • 论坛
  • 聊天
  • 成功故事
  • 动态
  • 联盟计划
Company
  • 关于我们
  • 联系方式
  • 评价
  • 媒体中心
  • CodeGym for EDU
  • 常见问题
  • 支持
CodeGymCodeGym 是一个从零开始学习 Java 编程的在线课程。该课程是初学者掌握 Java 的完美方式。它包含 1200+ 个带即时验证的任务,以及必要的 Java 基础理论。为了帮助你在学习中取得成功,我们实现了一系列激励功能:测验、编码项目、关于高效学习的内容,以及 Java 开发者职业相关内容。
关注我们
界面语言
English Deutsch Español हिन्दी Français Português Polski বাংলা
简体中文
मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
“程序员是培养出来的,不是天生的” © 2026 CodeGym
MastercardVisa
“程序员是培养出来的,不是天生的” © 2026 CodeGym