一、今日学习前言
今天系统学习了 Java 面向对象核心基础,涵盖对象实例化流程、构造方法完整规则、this关键字调用规则、toString重写、Java包机制、面向对象封装思想、四大访问权限修饰符、static静态成员与静态方法全套核心知识点。全部是后续Java开发的底层重点,也是考试、写代码最容易踩坑的部分。
二、对象实例化与初始化流程
1. 对象创建的两步核心流程
当我们 new 类名() 创建对象时,Java 会自动完成两件事:
1. 为对象分配堆内存空间
2. 自动调用对应的构造方法(有参/无参)
没有构造方法,对象就无法完成初始化,也就无法正常创建。
三、构造方法完整规则(重中之重)
1. 系统默认无参构造
• Java 默认给所有类自动赠送一个无参构造方法
• 关键前提:一旦我们手动写了有参构造方法,系统会收回默认无参构造
• 此时如果还需要
2. IDEA快速生成构造方法
不用手敲代码,快捷操作:
1. 类内空白处右键
2. 选择 Generate → Constructor
3. 按住 Ctrl / Shift 多选需要的参数
4. 一键生成有参/无参构造
3. this调用本类构造方法
可以在一个构造方法里,调用本类的另一个构造方法,简化代码。
硬性两大语法规则
1. this(参数); 必须写在构造方法的第一行
2. 不能循环调用、不能自己调用自己,否则直接死循环报错
4. 构造方法重载
一个类可以存在多个构造方法
• 无参构造、单参构造、多参构造
• 只要参数列表不同,就是合法重载
四、对象打印:toString方法重写
1. 默认直接打印对象,只会输出一串地址哈希值,没有意义
2. IDEA 右键 Generate → toString(),一键自动重写
3. 重写后打印对象,会展示对象内部所有属性信息
4. 一个类中:构造方法、普通方法、toString 可以共存,互不冲突
五、Java 包机制(package)
1. 包的作用
包就是文件夹,用来分类管理不同功能的Java代码,避免类名冲突。
2. 导入包规则
• 自定义类、第三方类:需要 import 包名.类名 手动导入
• java.lang 包下所有类,编译器自动导入,无需手动 import
3. 自定义包
自己创建 package 包名,规范管理项目代码结构。
六、面向对象三大特性之——封装
1. 封装核心概念
将数据(成员变量)和操作数据的方法结合在一起,
隐藏对象内部属性和底层实现细节,只对外暴露公开的接口访问。
2. 封装三大好处
1. 降低代码耦合性
2. 降低代码复杂度
3. 极大提高代码安全性(防止外部随意篡改数据)
3. 封装实现:private + get/set
• 所有成员变量用 private 私有化
• 外部无法直接访问、修改
• 提供 get方法:获取值、set方法:设置值
• 外部只能通过公开方法操作私有数据,安全可控
七、四大访问权限修饰符(从严到宽)
1. private 私有的
• 最小权限
• 只能在当前类内部访问
• 跨类、跨包完全无法使用
2. default 默认权限(啥都不写)
• 不写任何修饰符就是默认权限
• 仅当前包内可以访问
• 出了当前包完全无法访问
3. protected 受保护权限
包内可访问,跨包子类也可访问(后续深入学习)
4. public 公共权限
• 最大权限
• 任何位置、任何包、任何类都能正常访问
记忆:private < default < public
八、static 静态关键字(核心难点)
1. 普通成员变量(无static)
• 属于对象
• 存储在堆内存
• 每个对象独立一份数据
2. static 静态成员变量
• 不属于对象,属于类
• 存储在方法区
• 所有对象共享同一份数据
3. 静态成员四大特性
1. 是类属性,不属于某个具体对象
2. 既可以对象调用,也可以类名.变量调用(推荐类名调用)
3. 存放在方法区,不在堆内存
4. 生命周期跟随类的加载与卸载,比对象寿命更长
4. 静态方法特性
1. 属于类,不属于对象
2. 推荐 类名.静态方法名() 调用
3. 硬性规则:静态方法里,不能直接访问非静态变量、非静态方法
4. 静态方法不能使用 this 关键字
5. 静态变量独立初始化
静态成员随类加载优先初始化,优先于对象创建执行。
九、今日知识点总结
1. 对象实例化 = 分配内存 + 调用对应构造方法
2. 有无参构造共存规则:自定义有参后,无参必须手写
3. this调用构造必须第一行、禁止循环调用
4. toString重写实现对象友好打印
5. 包用于分类管理代码,lang包自动导入
6. 封装:私有化数据,对外提供get/set,提高安全性
7. 四大权限修饰符控制代码访问范围
8. static静态内容属于类、共享、存在方法区、静态不能访问非静态
十、今日学习感悟
今天学的是Java面向对象最底层、最核心的地基知识点。构造方法、封装、权限修饰符、static是后续所有代码、项目开发的基础。搞懂实例化流程、静态与非静态区别。但是在课上对于这些内容不像之前那样子好理解,所以掌握不够全,不够深,继续多练习题目,多敲敲代码。加油加油加油!