对象与类
面向对象程序设计,简称OOP,Java是完全面向对象的,所以必须熟悉OOP。OOP将数据放在第一位,再考虑操作数据结构的算法。
类
- 类是构造对象的模板或者蓝图。类构造对象的过程称为创建类的示例
- 对象中的数据称为实例域,操作数据的过程称为方法
- 实现封装的关键在于不能让类中的方法直接访问其它类的实例域,程序仅能通过对象的方法与对象数据进行交互
- 所有的类都继承于
Object
类
对象
- 对象的三个主要特性
- 对象的行为,可以对对象世家那些操作或者哪些方法
- 对象的状态,当施加那些方法时,对象如何响应
- 对象标识,如何辨别具有相同行为与状态的不同对象
类之间的关系
- 依赖,一个类操作另一个类。应当减少依赖关系,降低耦合度最小
- 聚合,一个类的对象包含着另一个类对象
- 继承,一个类扩展另一个类,不但拥有被扩展类的方法还有特殊的方法
对象与对象变量
构造器
- 用来创建并初始化对象,并且构造器的名字应该与类名一致
- 构造对象代码示例
Date day = new Date(); //创造了一个Date类的对象
- 一个对象变量并没有包含一个对象,而是仅仅引用一个对象
- new操作符的返回值也是一个引用
- 所有Java对象都存储在堆中
自定义类
- 定义代码示例
class People{
//类的私有变量
private int i = 0;
private int b = 0;
//定义无参构造器
public People(){
}
//定义类中方法
public void Sum(){
}
}
- 构造器总是伴随着
new
操作符的执行被调用 - 构造器应该与类同名
- 每个类可以有一个以上的构造器
- 构造器可以有0个、1个或者多个参数
- 构造器没有返回值
- 使用
this
关键字来标识隐式参数
封装的优点
- 可以改变内部实现,除了该类的方法之外,不会影响其他代码
- 更改器方法可以执行错误检查,然而直接对域进行赋值将不会进行这些处理
静态域与静态方法
- 如果使用
static
关键字来修饰变量,这个类的所有实例都共享这个变量
使用静态方法的两种情况
- 一个方法不需要访问对象状态
- 一个方法只需访问类的静态域
- 工厂方法--->静态方法的另一种用途
方法调用
- Java程序设计语言对对象采用的不是引用调用。
- 实际上,对象引用的是按值传递的
- 一个方法不能修改一个基本数据类型的参数
- 一个方法可以改变一个对象参数的状态
- 一个方法不能让对象参数引用一个新的对象
重载
- 如果多个方法有一样的名字,但是参数数量不同或者参数的类型不同,就会产生重载
默认初始化
- 如果没有显示的赋值,就会自动赋为默认值
- 数值为0、布尔为false、对象为null
this
关键字不仅可以引用隐式参数,也可以调用同类的另一个构造器
包
- 使用包的主要原因是保证类名的唯一性
- 需要那个包下的类,按需导入即可
类设计技巧
- 一定要保证数据私有
- 一定要对数据初始化
- 不要在类中使用过多的基本类型
- 不是所有的域都需要独立的域访问器和域更改器(getXxx和setXxx)
- 将职责过多的类进行分解
- 类名和方法名要能体现它们的职责(见名知意)
- 优先使用不可变的类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)