Java中成员变量分实例变量(每个对象独立,随对象创建初始化)和静态变量(类共享,类加载时初始化);方法需明确修饰符、返回类型和参数列表,static方法不能访问实例成员;封装要求成员变量私有、通过getter/setter控制访问。

Java中成员变量和方法的定义,核心在于明确它们属于类还是实例、何时初始化、能否被外部访问。关键不是“能不能写”,而是“为什么这样设计”。
成员变量:分清静态与实例
成员变量写在类内部、方法外部,分为两类:
-
实例变量:不加
static,每个对象独立一份,随对象创建而分配内存,初始值由类型默认给出(如int为0,Object为null); -
静态变量:用
static修饰,属于类本身,所有实例共享同一份,类加载时初始化,常用于计数器、配置常量等。
建议:优先使用实例变量;静态变量需谨慎,避免意外共享状态;常量推荐用public static final并大写命名(如MAX_SIZE)。
方法:必须有返回类型和参数列表
方法定义格式为:[修饰符] 返回类型 方法名(参数列表) { 方法体 }。重点看三处:
立即学习“Java免费学习笔记(深入)”;
-
修饰符决定访问权限和行为:如
public(任意位置可调)、private(仅本类可用)、static(无需实例即可调,不能直接访问实例变量); -
返回类型不能省略,即使不返回也要写
void; - 参数列表支持重载,但仅靠返回类型不同不能构成重载。
注意:static方法中不能用this或直接调用非static成员,这是编译期强制限制,源于静态上下文与实例生命周期分离。
访问控制与封装原则
成员变量通常设为private,通过public的getter/setter方法暴露必要操作——这不是形式主义,而是为了后续可加校验、日志、通知等逻辑。
例如:setAge(int age)里可以检查age > 0 && age ,比直接赋值person.age = -5更安全可靠。
方法则按实际使用范围设定:工具类方法多为public static,内部辅助逻辑可用private,子类需要扩展的考虑protected。
初始化时机与顺序
实例变量在构造器执行前初始化(先执行字段初始化表达式,再执行构造器代码块,最后是构造器主体);静态变量在类首次主动使用时初始化,且只执行一次。
常见陷阱:在静态变量初始化时调用尚未加载的类,或在实例变量初始化中引用this(此时对象还未构建完成),会导致编译错误或NullPointerException。
建议:复杂初始化逻辑尽量移入构造器或专用初始化方法,提高可读性和可控性。










