class是定义Java类的唯一关键字;合法类需结构明确、封装合理、意图清晰;public类必须与文件名完全一致且一文件至多一个;成员变量须private并配getter/setter;构造方法应显式定义以确保对象合法创建;执行顺序为静态块→实例块→构造器。

class 是定义 Java 类的唯一关键字,没有其他替代写法。一个合法、可维护、符合工程规范的类,不是把字段和方法随便堆在一起就行——它必须有明确结构、合理封装和清晰意图。
类声明必须匹配文件名且仅一个 public 类
Java 编译器强制要求:如果类用 public 修饰,那么该类所在的 .java 文件名必须与类名**完全一致(大小写敏感)**,且一个文件里最多只能有一个 public 类。
- 错误示例:
public class student { ... }放在Student.java中 → 编译失败(类名首字母未大写) - 错误示例:在
Person.java中写两个public class→ 编译报错class Person is public, should be declared in a file named Person.java - 正确做法:非 public 类(如
class Helper)可以和 public 类共存于同一文件,但仅作为辅助类存在,不能被其他包直接 new 实例
成员变量必须私有化,用 getter/setter 控制访问
直接暴露 public 字段(如 public String name;)是严重设计缺陷——它破坏封装,让外部代码随意修改状态,后续加校验、日志、通知等逻辑几乎不可能。
- 应该始终用
private声明字段:private String name;、private int age; - 提供带逻辑的
setter:比如setAge(int age)中检查age >= 0 && age - getter 不一定都要暴露:敏感字段(如密码哈希)可只提供
isPasswordSet()而不返回原始值 - 注意默认值陷阱:
int默认是0,String默认是null,若业务上 “未设置” 和 “0/null” 含义不同,应改用包装类 + 显式初始化或 Optional
构造方法不是可有可无的“语法糖”,而是对象生命周期的第一道关卡
构造方法决定一个对象是否能被合法创建。省略它看似省事,但会隐式生成无参构造器,可能导致对象处于无效状态(如 name = null, age = 0 却被当作有效用户)。
- 推荐显式定义至少一个构造方法,尤其是当字段有业务约束时
- 常用组合:
private无参构造(供框架反射用)+public全参构造(保证必填字段不为空) - 避免在构造器中调用
this(...)以外的实例方法——此时对象尚未初始化完成,可能引发 NPE 或逻辑错乱 - 不要在构造器中启动线程、打开数据库连接、发 HTTP 请求——这些行为应延迟到业务方法中,否则测试难、资源泄漏风险高
静态代码块、实例代码块、构造器的执行顺序容易混淆
这三者执行时机不同,但新手常误以为“写了就立刻运行”。实际顺序固定:静态代码块 → 实例代码块 → 构造器,且各自只执行一次(静态块类加载时,实例块每次 new 时)。
立即学习“Java免费学习笔记(深入)”;
public class Demo {
static { System.out.println("1. 静态块"); }
{ System.out.println("2. 实例块"); }
public Demo() { System.out.println("3. 构造器"); }
public static void main(String[] args) {
new Demo();
new Demo();
}
}
// 输出:
// 1. 静态块
// 2. 实例块
// 3. 构造器
// 2. 实例块
// 3. 构造器
- 静态块适合初始化类级资源(如配置缓存、单例实例)
- 实例块适合复用多构造器中的公共初始化逻辑(比复制粘贴更安全)
- 但绝大多数场景,优先用构造器——语义更明确,IDE 更易追踪,调试更直观
class 后面写什么,自然就有答案。










