Java中的类与对象

手写笔记转换

面向对象编程和面向过程编程

面向对象编程

面向对象编程是一种编程范式,它将现实世界中的事物抽象为对象把类或对象作为基本单元来组织代码,对象具有属性(称为字段或属性)和行为(称为方法)。面向对象编程的设计思想是以对象为中心,通过对象之间的交互来完成程序的功能,具有灵活性和可扩展性,通过封装和继承可以更好地应对需求变化。

面向过程编程

面向过程编程是一种以过程或函数为中心的编程范式,以过程作为基本单元来组织代码。过程其实就是动作,对应到代码中来就是函数,面向过程中函数和数据是分离的,数据就是成员变量。

主要区别

数据与行为的关系

  • 面向对象:数据和行为封装在对象内部,数据操作由对象方法进行管理。
  • 面向过程:数据和函数是分离的,函数对数据进行操作。

可扩展性和复用性

  • 面向对象:通过继承、接口、多态等机制支持代码的高复用性和扩展性。
  • 面向过程:复用性较低,扩展需要修改已有代码,影响整体稳定性。

面向对象的特性和设计原则

三大特性

  • 封装:将数据和行为封装在对象内部,提供接口进行访问,隐藏实现细节,提高安全性。
  • 继承:子类可以继承父类的属性和方法,实现代码复用和扩展。
  • 多态:对象可以通过父类或接口进行多态性调用,不同对象在运行时执行不同的行为。

六大设计原则

  • 单一职责原则(SRP):一个类应该只有一个引起它变化的原因,即一个类应该只负责一项职责。例子:考虑一个员工类,它应该只负责管理员工信息,而不应负责其他无关工作。
  • 开放封闭原则(OCP):软件实体应该对扩展开放,对修改封闭。例子:通过制定接口来实现这一原则,比如定义一个图形类,然后让不同类型的图形继承这个类,而不需要修改图形类本身。
  • 里氏替换原则(LSP):子类对象应该能够替换掉所有父类对象。例子:一个正方形是一个矩形,但如果修改一个矩形的高度和宽度时,正方形的行为应该如何改变就是一个违反里氏替换原则的例子。
  • 接口隔离原则(ISP):客户端不应该依赖那些它不需要的接口,即接口应该小而专。例子:通过接口抽象层来实现底层和高层模块之间的解耦,比如使用依赖注入。
  • 依赖倒置原则(DIP):高层模块不应该依赖低层模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。例子:如果一个公司类包含部门类,应该考虑使用合成/聚合关系,而不是将公司类继承自部门类。
  • 最少知识原则 (Law of Demeter):一个对象应当对其他对象有最少的了解,只与其直接的朋友交互。

类的组成结构

  • 变量(属性)
    • 静态变量:归属于整个类
    • 实例变量:归属于一个对象
  • 方法(行为)
    • 静态方法:归属于整个类
    • 实例方法:归属于一个对象

实现细节

  • 打印对象名可以输出该对象的内存地址
  • 成员变量具有默认值
  • 一个源文件中可以定义多个类但是只能出现一个主类(被 public修饰)且该类与源文件的文件名相同

内存原理

对象在内存中的创建过程

  • 加载.class文件
  • 在栈区声明局部变量(对象的引用)
  • 在堆区中开辟内存空间并产生对象的地址值
  • 默认初始化(对成员变量赋默认值)
  • 显式初始化(对常量进行初始化)
  • 构造方法初始化

单个对象的内存情况

栈区

  • 主方法main

  • 对象的引用

堆区

  • 对象的变量
  • 成员方法的地址

项目开发中类的种类

Bean类

使用场景

用于描述事物的类

特点

  • 至少两个构造方法,一个无参构造方法,一个有参构造方法
  • 成员变量为private
  • 为所有成员变量提供gettersetter

工具类(Utils)

使用场景

将常用的方法封装成工具类

特点

  • 构造方法是private
  • 方法都是静态方法(static

测试类

使用场景

用于检查代码的正确性

特点

  • 带有main方法
最后更新于 2025-04-16 14:45 UTC
그 경기 끝나고 좀 멍하기 있었는데 여러분 이제 살면서 여러가
使用 Hugo 构建
主题 StackJimmy 设计