Java类定义需遵守修饰符顺序、命名规范及编译器硬性要求:public类名须与文件名一致且唯一;类体不可含执行语句;无显式构造器时默认插入public无参构造器,一旦定义则消失;子类构造器默认调用super()。

Java 中定义一个类,核心就是用 class 关键字 + 类名 + 一对大括号。但真正写对、写稳,得注意修饰符顺序、命名规范、以及编译器对结构的硬性要求。
类声明必须包含 public 或默认访问权限
如果类被声明为 public,则文件名必须与类名完全一致(包括大小写),且一个 .java 文件里最多只能有一个 public 类。
- 合法:
public class User { }→ 文件必须命名为User.java - 合法:
class Helper { }→ 文件可任意命名(如Utils.java),但该类在包外不可见 - 非法:
public class User { }→ 类名首字母小写不违反语法,但违反 Java 命名约定;更严重的是若文件叫User.java,编译直接报错class user is public, should be declared in a file named user.java
类体里不能直接写执行语句
类定义内部只允许成员变量、方法、构造器、初始化块、嵌套类等结构。任何试图“直接执行”的代码(比如调用 System.out.println())都会导致编译失败。
- 错误写法:
class Log { System.out.println("init"); // 编译报错:非法的表达式开始 void print() { } } - 正确写法(移到实例/静态初始化块中):
class Log { { System.out.println("instance init"); } static { System.out.println("static init"); } void print() { } }
构造器不是必须显式写出,但隐式规则很关键
如果你没写任何构造器,编译器会自动插入一个无参、public、空体的默认构造器。但只要你写了任一构造器(哪怕带参数),这个默认构造器就立刻消失。
立即学习“Java免费学习笔记(深入)”;
- 没写构造器 → 可以
new Log() - 写了
Log(String name)→ 再用new Log()就编译失败,除非你手动补上无参构造器 - 子类构造器第一行默认调用
super(),如果父类删掉了无参构造器,子类又没显式调用super(...),就会编译报错
类定义看着简单,但修饰符组合、初始化时机、构造器继承链这几个点,是新人最容易掉坑的地方。尤其在写工具类或继承体系时,漏掉 public、误删无参构造器、或在类体里写执行语句,都会让编译器立刻拒绝合作。










