Java包名须全小写英文点分隔,类文件路径必须与包声明严格一致;类名首字母大写且一文件一public类;main方法签名必须为public static void main(String[] args);import需显式精简,禁用*通配符。

包名必须全小写且用英文点分隔
Java 的包名不是随便起的,它直接决定类文件在磁盘上的路径结构。比如声明 package com.example.utils;,就必须把该类放在 src/com/example/utils/ 目录下,否则编译报错 package com.example.utils does not exist。
常见错误包括:用下划线(com_example)、大写字母(com.Example)、中文或拼音缩写(com.shangwu)。这些虽可能通过编译,但违反 JDK 规范,也容易和工具链(如 Maven、IDE 自动识别)冲突。
- 公司域名倒写是通用做法:比如
org.apache.commons、cn.bjut.web - 项目内模块名用名词,避免动词:
service、dto、config可以,handle或do不推荐 - 测试代码包名加
.test后缀,如com.example.service.test,便于构建工具区分主/测源码
类名首字母大写,一个 .java 文件只放一个 public 类
Java 强制要求:如果类声明为 public class UserLoginService,那么文件名必须是 UserLoginService.java,且该文件里不能再有另一个 public class。这是编译器硬性限制,不是风格建议。
容易被忽略的是非 public 类——它们可以和主类共存于同一文件,但实际工程中几乎不用。因为 IDE 和构建工具(如 Maven)默认按文件名扫描入口类,混写会导致不可靠的依赖分析和测试发现失败。
立即学习“Java免费学习笔记(深入)”;
- 类名用 UpperCamelCase,不带下划线或数字开头:
HttpRequestHandler✅,http_request_handler❌ - 接口名也是 UpperCamelCase,但推荐用形容词或名词表达能力,如
Runnable、DataSource,而非IUserDao - 枚举类、注解类同样遵循此命名规则,且通常独立成文件
main 方法必须是 public static void main(String[] args)
哪怕只是写个 Hello World,这个签名少一个修饰符或改个参数类型,JVM 就找不到入口。常见错误包括:static public(顺序错没关系),但 public static void main(String... args) 是合法的;而 public static void main(String args)(缺 [])或 public static void main(string[] args)(string 首字母小写)都会导致运行时报 Could not find or load main class 或 No such method error。
注意:IDE 有时会自动生成带 throws Exception 的版本,这没问题,但别误以为它是必需的——main 方法本身不需要声明异常,除非你显式 throw。
- 参数名
args不是关键字,写成arguments也可以,但所有教材和团队规范都用args,保持一致更利于协作 - 不要为了省事把逻辑全塞进
main,它只应作为启动跳板,真正业务应拆到其他类中 - 单元测试不用
main,用 JUnit 的@Test方法替代
import 语句要显式、精简,避免 * 通配符
写 import java.util.*; 看似省事,但会隐藏类来源,增加命名冲突风险。例如同时引入 java.util.Date 和 java.sql.Date,用 * 后再写 Date now = new Date();,编译器会报错“reference to Date is ambiguous”。
现代 IDE(IntelliJ / Eclipse)都能自动优化 import,但手动检查仍有价值:删掉未使用的 import、合并重复项、把同包类排前面。Maven 构建时若用了 Checkstyle 插件,import * 往往直接被标记为违规。
-
标准库优先用全限定名导入:
import java.time.LocalDate;,而不是import java.time.*; - 静态方法导入要克制,比如
import static org.junit.Assert.assertEquals;只在测试类中适度使用 - 第三方库如 Guava、Lombok 的 import 要明确版本兼容性,避免因升级导致符号找不到
Java 基础结构看着简单,但包路径错一位、类名大小写差一点、import 少一个点,都可能让代码从编译失败到运行时崩溃。最麻烦的是这些错误不报红,而是静默失效——比如 Spring 扫不到组件、JUnit 找不到测试方法。写完记得用 javac -verbose 看实际加载了哪些类,比盲目重试快得多。










