Java类定义需用class关键字,严格遵循语法:文件名与public类名一致、类体必有{}、成员须在{}内、构造器名须同类名且无返回类型、main方法为程序入口。

Java中定义一个类,核心是用 class 关键字声明,并遵循严格的语法规则;不写访问修饰符、漏掉花括号、在类体外写方法或字段,都会直接编译失败。
类声明必须以 public class ClassName 或 class ClassName 开头
一个 .java 文件里最多只能有一个 public class,且文件名必须与该类名完全一致(包括大小写)。非 public 类可以有多个,但不能被其他包直接访问。
-
public class User→ 文件必须叫User.java -
class Helper→ 可放在任意同包的.java文件中,无需匹配文件名 - 如果写成
public class user(小写 u)而文件叫User.java,javac会报错:class user is public, should be declared in a file named user.java
类体必须用 {} 包裹,内部可包含字段、构造器、方法、嵌套类等
类体不是可选的——哪怕空类也必须写一对大括号。所有成员(字段、方法等)必须严格位于这对 {} 内部,不可出现在类声明之外。
public class Product {
// 字段
private String name;
private double price;
// 构造器
public Product(String name, double price) {
this.name = name;
this.price = price;
}
// 方法
public String getName() {
return name;
}
}
- 漏掉右大括号会导致编译错误:
error: class, interface, or enum expected - 在
}外写System.out.println(...)是非法的,Java 不允许“裸语句”存在于类体外 - 字段和方法默认具有包级访问权限;加
private/public/protected才改变可见性
构造器不是必须写,但一旦自定义就必须匹配类名且无返回类型
如果不写任何构造器,编译器会自动提供一个无参、包访问权限的默认构造器。但只要写了至少一个构造器,这个默认构造器就不再存在。
立即学习“Java免费学习笔记(深入)”;
- 构造器名必须与类名完全相同(大小写敏感)
- 构造器不能写返回类型,连
void都不行;写成public void User(...)会被当成普通方法,导致对象无法初始化 - 常见错误:
public User() { this.name = ""; }没问题;但public void User() { ... }编译通过,运行时可能因未初始化字段引发NullPointerException
类不能直接执行,必须通过 main 方法或被其他类实例化调用
Java 程序入口是静态的 public static void main(String[] args) 方法,它必须定义在某个类中。类本身只是模板,不运行 main 或不创建实例,代码不会执行。
public class App {
public static void main(String[] args) {
Product p = new Product("Laptop", 999.99); // 实例化触发构造器
System.out.println(p.getName()); // 调用方法
}
}
- 把
main写错成public static void Main(String[] args)(M 大写)会导致java命令找不到主类 - 在
Product类里写main并不违法,但它只属于Product,和其他类无关 - 类加载顺序、静态块执行时机、继承链中的构造器调用顺序,这些在复杂场景下容易出隐蔽 bug
真正容易被忽略的是:类的加载和初始化发生在运行时,而语法检查只在编译期;看似合法的结构(比如字段赋值依赖尚未初始化的静态变量),可能直到第一次使用才暴露问题。










