{"id":20894561,"url":"https://github.com/gnu4cn/learningjava","last_synced_at":"2025-03-12T19:23:28.520Z","repository":{"id":43029720,"uuid":"431042936","full_name":"gnu4cn/learningJava","owner":"gnu4cn","description":"Repo for learning Java Language.","archived":false,"fork":false,"pushed_at":"2025-01-17T01:22:19.000Z","size":43048,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-17T02:26:40.457Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gnu4cn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-23T09:45:41.000Z","updated_at":"2025-01-17T01:22:21.000Z","dependencies_parsed_at":"2025-01-17T02:35:23.371Z","dependency_job_id":null,"html_url":"https://github.com/gnu4cn/learningJava","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnu4cn%2FlearningJava","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnu4cn%2FlearningJava/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnu4cn%2FlearningJava/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnu4cn%2FlearningJava/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gnu4cn","download_url":"https://codeload.github.com/gnu4cn/learningJava/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243278380,"owners_count":20265537,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-18T10:20:08.309Z","updated_at":"2025-03-12T19:23:28.495Z","avatar_url":"https://github.com/gnu4cn.png","language":"Java","readme":"# Java 编程学习项目 ☕️\n\n\n这是一个学习 Java 的项目。使用 Eclipse IDE/VIM、Gradle/NPM 构建工具。后期会涉及到 NPM 的使用。主要学习 Java 的基础知识，Java 本地应用程序的编写。 __项目使用 JDK `11.0.12`__ 语言环境。\n\n在线阅读：[java.xfoss.com](https://java.xfoss.com)。\n\n本地阅读：[`mdbook` 本地运行](./src/howto_read_locally.md)\n\n---\n\n## 0. 环境搭建\n\n本项目是在 Ubuntu Linux 20.04 LTS 上进行的。\n\n\n- 安装JDK\n\n    JDK的当前LTS版是 `JDK 17.0.1`（Oracle, 2021-11），你可以直接从 [Java Downloads | jdk.java.net](https://jdk.java.net/java-se-ri/11) 下载。openjdk-11+28_linux-x64_bin.tar.gz` 压缩包有 178.9M 大小。\n\n    运行下面的命令，就安装好 OpenJDK 了。\n\n```bash\n$sudo tar xf /path/to/openjdk-11+28_linux-x64_bin.tar.gz -C /opt/\n$sudo ln -s /opt/openjdk-11+28 /opt/jdk\n$sudo update-alternatives --install \"/usr/bin/java\" \"java\" \"/opt/jdk/bin/java\" 1\n$sudo update-alternatives --install \"/usr/bin/javac\" \"javac\" \"/opt/jdk/bin/javac\" 1\n```\n\n运行 `$java -version` 与 `$javac -version` 测试 JDK 是否安装妥当。\n\n- 安装 [Gradle](https://gradle.org/)\n\n    参考 Gradle 官网上使用 [SDKMAN!](http://sdkman.io/) 直接安装即可。\n\n- 安装Maven\n\n    [Apache Maven](http://maven.apache.org/) 可以直接下载，下载到的 `apache-maven-3.8.4-bin.tar.gz`压缩包，大小约 9M，安装步骤与JDK的略有不同：\n\n```bash\n$sudo tar xf /path/to/apache-maven-3.8.4-bin.tar.gz -C /opt/\n$sudo ln -s /opt/apache-maven-3.8.4 /opt/mvn\n$sudo vim.gtk /etc/profile.d/mvn.sh\n$sudo chmod +x /etc/profile.d/mvn.sh\n```\n\n其中建立了一个 `/etc/profile.d/mvn.sh` 文件，并修改为了可执行文件。该文件的内容为：\n\n```sh\nexport JAVA_HOME=/opt/jdk\nexport M2_HOME=/opt/mvn\nexport MAVEN_HOME=/opt/mvn\nexport PATH=${M2_HOME}/bin:${PATH}\n```\n\n随后可将国内的华为 MAVEN 代码仓库，设置为MAVEN的默认代码仓库。运行如下命令：\n\n```bash\n$if [ -d $HOME\"/.m2\" ]; then :; else echo \"~/.abc not exist. Now create\"; mkdir $HOME\"/.m2\"; fi\n$wget -qO ~/.m2/settings.xml https://mirrors.huaweicloud.com/api/v1/configurations/maven?\n```\n\n- 安装NVM\n- 配置 `~/.vimrc`\n\n## 1. 关于文件/目录结构\n\n在编写 Java 程序时，使用 Maven 构建，必须以这样的 `src/main/java/com/xfoss/learningJava/*.java` 的文件/目录结构，否则会报错：\n\n```bash\npeng@uDesktop:~/eclipse-workspace/learningJava$ java -jar target/com.xfoss.learningJava-0.0.1.jar\nError: Could not find or load main class com.xfoss.learningJava.PhraseOMatic\nCaused by: java.lang.ClassNotFoundException: com.xfoss.learningJava.PhraseOMatic\n```\n\n\u003e 同时，`packege com.xfoss.com.learningJava;` 对应的包 `com.xfoss.learningJava` 必须以这个名字命名，这也是上面目录中 `/com/xfoss/learningJava` 的来源。\n\n## 2. 使用 `exec-maven-plugin`\n\n使用这个插件，可以开启 `mvn exec:java` 命令，实时运行（正在）编写的 Java 程序。该插件支持两种运行模式，一种是在 Maven 所在线程里运行（需要修改 MAVEN 运行参数 `export MAVEN_OPTS=-Xmx1024m`，以增加JVM虚拟机的运行内存）；另一种以独立线程运行（尚需测试）。\n\n## 3. `build.gradle.kts` 文件中的 kotlin dsl 语法\n\nKotlin DSL, 领域特定语言，Domain Specific Language\n\n\u003e 参考： [Kotlin 之美 -- DSL 篇](https://juejin.cn/post/6844903569372479501)\n\n\n## 目录\n\n### 基础\n\n\n- [类与对象：对象村之旅](docs/Ch02_Class_and_Object_A_Trip_to_Objectville.md)\n- [原生与引用：熟知你的变量](docs/Ch03_Primitives_and_References_Know_Your_Variables.md)\n- [方法对实例变量的使用：对象的行为方式](docs/Ch04_Methods_Use_Instance_Variables_How_Objects_Behave.md)\n- [实战编程：给方法赋能](docs/Ch05_Writing_a_Program_Extra-Strength_Methods.md)\n- [了解Java API：使用Java的库](docs/Ch06_Get_to_Know_The_Java_API_Using_the_Java_Library.md)\n\n### 继承和多态机制\n\n\n- [继承与多态：追求对象村的更好生活](docs/Ch07_Inheritance_and_Polymorphism_Better_Living_in_Objectville.md)\n- [接口与抽象类](docs/Ch08_Interfaces_and_Abstract_Classes.md)\n\n### 编译器、堆与栈\n\n\n- [构造器与垃圾回收: 对象的生与死](docs/Ch09_Constructors_and_Garbage_Collection_Life_and_Death_of_an_Object.md)\n- [数字与静态值：数字为要](docs/Ch10_Numbers_and_Statics_Numbers_Matter.md)\n- [例外处理：危险行为](docs/Ch11_Exception_Handling_Risky_Behavior.md)\n\n### GUI\n\n\n- [获得GUI：一个甚为形象的故事](docs/Ch12_Getting_GUI_A_Very_Graphic_Story.md)\n- [运用 `Swing`: 在 `Swing` 上干活](docs/Ch13_Using_Swing_Work_on_Your_Swing.md)\n\n###  对象序列化与数据结构\n\n\n- [对象序列化与文件的输入/输出：对象保存](docs/Ch14_Serialization_and_File_I_O_Saving_Objects.md)\n- [联网与线程：构造连接](docs/Ch15_Networking_and_Threads_Make_a_Connection.md)\n- [集合与泛型：数据结构](docs/Ch16_Collections_and_Generics_Data_Structure.md)\n\n### 完结\n\n\n- [打包、JARS与部署：发布代码](docs/Ch17_Package_JARs_And_Deployment_Release_Your_Code.md)\n- [使用 RMI 特性进行远端部署：分布式计算](docs/Ch18_Remote_Deployment_with_RMI_Distributed_Computing.md)\n\n### 附录\n\n\n- [附录 A：十个本书未列入正式章节的方面](docs/Ch19_Appendix.md)\n- [附录 B: 其他要点](docs/Ch20_Appendix_B.md)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnu4cn%2Flearningjava","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgnu4cn%2Flearningjava","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnu4cn%2Flearningjava/lists"}