Java面向对象编程知识补充学习-2026.3.21

1. 关于 JavaBean 类

  • 定义 :符合特定规范的实体类 ,用于封装一类事物的数据与状态(比如学生、商品、用户等),是 Java 开发中最常用的数据载体。
  • 核心特征 :
    • 类是公共的(public)
    • 包含无参构造方法
    • 成员变量私有化(private)
    • 为每个私有变量提供公共的 getXxx() / setXxx() 方法
  • 能力 :可以定义属性 (成员变量)和行为(成员方法),主要用于数据封装,也可包含简单业务逻辑。
  • 误区纠正:不是所有 "描述一类事物" 的类都是 JavaBean,只有满足上述规范的才是标准 JavaBean。
  • JavaBean类与其他概念对比
概念 说明
JavaBean 特指符合"公共类 + 无参构造 + 私有属性 + getter/setter"规范的类
POJO Plain Old Java Object,普通 Java 对象,不强制要求 getter/setter,范围比 JavaBean 更广
Entity 通常指与数据库表对应的 JavaBean,常配合 JPA/Hibernate 使用
DTO Data Transfer Object,用于层间数据传输,通常是 JavaBean 形式
VO View Object,用于前端展示,也是 JavaBean 的一种形式

2. 就近原则

在 Java 方法中直接使用变量时,查找顺序遵循就近原则:

  • 第一步:优先查找当前方法内的局部变量
  • 第二步:如果局部变量不存在,再查找当前类的成员变量

如果方法内局部变量与成员变量同名,会优先使用局部变量,这也是变量名冲突的根源。


3. this 关键字的作用

this 代表当前对象本身,核心作用是:

  • 区分同名变量 :当局部变量与成员变量同名时,this.变量名 明确指代成员变量,避免就近原则导致的变量混淆。
  • 其他扩展作用:
    • 调用当前类的其他构造方法(this(参数),必须放在构造方法第一行)
    • 调用当前对象的其他成员方法
    • 作为参数传递当前对象本身

this 最底层的本质 :代表 所在方法调用者的内存地址。

4. Java 创建对象七步与内存生命周期总结

1. 创建对象的七步(Student stu = new Student();)

  1. 加载 class 字节码文件 :JVM 读取并解析 Student.class,将类信息存入方法区。
  2. 声明局部变量 :在栈内存 中声明变量 stu(此时仅为引用,无具体值)。
  3. 开辟堆空间 :在堆内存中为新对象分配内存区域。
  4. 默认初始化 :对象属性被赋予系统默认值(如 int 为 0,String 为 null)。
  5. 显式初始化 :执行代码中直接赋值的属性初始化(如 private String name = "默认名";)。
  6. 构造方法初始化:执行构造方法内的逻辑,完成最终属性赋值。
  7. 地址赋值 :将堆中对象的内存地址赋值给栈中的 stu 变量,完成对象绑定。

2. 方法出栈后的变量变化

  • 方法执行结束后,对应的栈帧 被销毁,方法内所有局部变量(包括基本类型、对象引用)全部释放,内存回收。
  • 注意 :堆中的对象本身不会随方法出栈而消失,只有当没有任何引用指向它时,才会被 GC 回收。

3. 堆中对象的生命周期

  • 当堆中的对象没有任何引用指向它时,会被 Java 垃圾回收器(GC)标记并回收,从堆中移除。
  • 只要还有引用(如成员变量、静态变量引用),对象就会一直存活。

4. 方法区的生命周期

  • 方法区中的类字节码、静态变量等信息长期存在,通常在整个虚拟机运行期间都不会消失。
  • 只有当JVM 关闭或类被主动卸载时,方法区中的类信息才会被释放。
相关推荐
古法老登瞎折腾8 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
学逆向的8 小时前
C 堆区内存管理
c语言·开发语言·网络安全
huoyueyi8 小时前
《融天AI-APP从0到1开发实录》
开发语言·lua
zhangrelay8 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
智能运维指南8 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
yz_aiks9 小时前
Spring AI 2.1 ChatMemory 已过时用什么替代:迁移到 Session Memory 实战(JDBC 存储与会话压缩)
java·spring boot·大模型·ai agent·spring ai
金銀銅鐵9 小时前
[Java] 用 GUI 展示 EnumMap 增删键值对时的内部变化
java·后端·ai编程
学长毕设9 小时前
基于SpringBoot的上门洗车服务系统设计与实现
java·spring boot·后端
jason成都10 小时前
RTKLIB-Java 多基线联合RTK:FIX率从0%到91.5%的三层根因修复
java·gnss·rtklib·rtklib_java
OpenAnolis小助手10 小时前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区