成员变量是类中直接定义的变量,分实例变量(属对象)和静态变量(属类);成员方法是类中定义的函数,实例方法可访问所有成员,静态方法只能访问静态成员;访问控制由private、protected、public和默认修饰符决定;初始化顺序严格遵循父类静态→子类静态→父类实例→子类实例,且构造过程中调用被重写方法可能导致未初始化值问题。

成员变量就是类里直接定义的变量
它们属于类的实例(或类本身,如果是 static 的),生命周期和对象绑定。比如:
public class Person {
String name; // 实例成员变量
static int count; // 类成员变量(静态)
}注意:未初始化的实例成员变量会被 JVM 自动赋予默认值(0、false、null),但局部变量不会——这是新手常报 variable might not have been initialized 错误的原因。
成员方法就是类里定义的函数
它们用来操作成员变量或提供行为接口,必须依附于类存在,不能独立运行。关键点:
- 实例方法能直接访问实例成员变量和静态成员变量;
- 静态方法只能访问静态成员变量和其他静态方法,否则编译报错
non-static variable cannot be referenced from a static context; - 方法签名(
返回类型 方法名(参数列表))决定重载,而返回类型不参与重载判断。
成员变量和成员方法的访问控制要看修饰符
Java 用 private、protected、public 和默认(包级)控制可见性:
-
private成员只能在本类内访问; - 默认(不写修饰符)表示同包可访问;
-
protected允许同包 + 子类(即使跨包)访问; -
public最开放,但别滥用——暴露太多内部状态容易破坏封装。
private 方法无法被子类覆盖,也不参与多态分派。
初始化顺序直接影响成员变量的值
Java 按以下顺序初始化:
- 父类静态变量 → 父类静态代码块;
- 子类静态变量 → 子类静态代码块;
- 父类实例变量 → 父类实例代码块 → 父类构造器;
- 子类实例变量 → 子类实例代码块 → 子类构造器。
String name = getName();),而该方法被子类重写,那实际执行的是子类版本——此时子类实例变量可能还未初始化,值为默认值。这个陷阱在抽象基类中尤其危险。










