# OnJava **Repository Path**: zypdominate/on-java ## Basic Information - **Project Name**: OnJava - **Description**: 阅读《On Java》记录。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-26 - **Last Updated**: 2025-08-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Java ### 导入 Java导入机制的特性,主要区别在于普通导入(class import)和静态导入(static import)的不同用法: ```java // 正确:普通导入类 import tools.Range; // 正确:静态导入所有静态方法 import static tools.Range.*; // 错误:静态导入不能直接导入类 // import static tools.Range; public class ForInInt { public static void main(String[] args) { // 当使用普通导入时,需要带类名调用 for (int i : Range.range(10)) { ...} // 当使用静态导入时,可以直接调用 for (int i : range(10)) { ...} } } ``` 关键差异说明: 1. `import tools.Range` 是导入类,调用静态方法需要带类名前缀(`Range.range()`) 2. `import static tools.Range.*` 是静态导入所有静态方法,可以直接调用方法(`range()`) 3. 静态导入的语法是用于导入类的静态成员(方法/变量),不能直接导入类本身 4. 如果尝试`import static tools.Range.range` 只导入单个静态方法,可以不带通配符`*` ## 创建工程框架 ## 安装 gradle 管理员权限命令行: ```bash choco install gradle ``` 初始化 Gradle 项目 `gradle init --type basic` ```bash D:\Developer\MyGiteeProject\OnJava>gradle init --type basic Starting a Gradle Daemon (subsequent builds will be faster) Project name (default: OnJava): Select build script DSL: 1: Kotlin 2: Groovy Enter selection (default: Kotlin) [1..2] 2 Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] no > Task :init Learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.13/samples [Incubating] Problems report is available at: file:///D:/Developer/MyGiteeProject/OnJava/build/reports/problems/problems-report.html Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.13/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD SUCCESSFUL in 39s 1 actionable task: 1 executed ``` 编写主 build.gradle 文件 ```groovy plugins { id 'java' id 'application' id 'idea' } //sourceCompatibility = 11 //targetCompatibility = 11 repositories { mavenCentral() } // 全局的依赖配置 dependencies { testImplementation 'junit:junit:4.13.2' } // 为每个子项目/模块创建单独的源集和任务 def moduleDirs = ['objects', 'operators', 'control', 'tools'] // 正确的方式创建源集 moduleDirs.each { String moduleDir -> sourceSets.create(moduleDir) { java.srcDir(moduleDir) resources.srcDir(moduleDir) } // 为每个源集创建单独的依赖配置 configurations { "${moduleDir}Implementation" { extendsFrom implementation } } // 创建运行任务 tasks.register("run${moduleDir.capitalize()}", JavaExec) { description = "运行${moduleDir}模块中的主类" group = "application" classpath = sourceSets."${moduleDir}".runtimeClasspath mainClass = "请在运行时指定主类" // 允许在命令行传递主类 doFirst { mainClass = project.hasProperty("mainClass") ? project.getProperty("mainClass") : mainClass if (mainClass == "请在运行时指定主类") { throw new GradleException("请通过 -PmainClass=类名 指定要运行的主类") } } } } // 添加额外配置以确保IDEA正确识别源代码目录 idea { module { moduleDirs.each { dir -> sourceDirs += file(dir) } } } // 修改源码集配置 // 动态获取所有非标准目录作为源码目录 def getSourceDirs() { def excludeDirs = ['.gradle', '.idea', 'build', 'gradle', 'src'] return file('.') .listFiles() .findAll { it.isDirectory() && !it.name.startsWith('.') && !(it.name in excludeDirs) } } // 可选:配置IDEA识别这些目录 sourceSets { main { java { srcDirs = getSourceDirs() // 自动包含所有有效目录 } } } ``` 刷新 gradle:在项目根目录下运行`./gradlew clean build`命令。 创建示例模块 objects 后,添加 Java 代码,编译运行。 ### IDEA 配置 **使用IDEA而不是Gradle运行**: - 打开IDEA设置(File > Settings) - 导航到Build, Execution, Deployment > Build Tools > Gradle - 将"Build and run using"设置为"IntelliJ IDEA" - 将"Run tests using"设置为"IntelliJ IDEA" **刷新Gradle项目**: - 在IDEA中,点击右侧Gradle面板中的刷新按钮,或者 - 在项目根目录下运行 `./gradlew clean build` 命令