
9、类、对象、引用
封装:将数据和操作合为一个整体,保证了数据的安全性和一致性。 继承:允许一个类继承另一个类的属性和方法,从而减少代码的冗余。 多态:同一个方法可以在不同类型的对象上有不同的行为,增加了程序的灵活性。 单一职责原则(Single Responsibility Principle,SRP):一个类只能有一个主要的职责。 接口隔离原则(Interface Segregation Principle,ISP):类之间通过接口进行交互,尽量减少直接依赖。 里氏替换原则(Liskov Substitution Principle,LSP):对象类型可以被其子类替换而不影响系统的行为。 依赖倒置原则(Dependence Inversion Principle,DIP):不要让高层次的模块依赖低层次的模块,而是倒置依赖关系。 开放封闭原则(Open/Closed Principle,OCP):类的开闭原则指的是类应该是开放的(对扩展开放)而封闭的(对修改封闭)。 迪米特法则(Law of Demeter):一个对象 shouldn't send messages to another object that it shouldn't have access to. 面向对象分析(OOA):通过分析现有的问题,确定系统的需求和功能。 面向对象设计(OOD):根据分析结果设计类的结构和接口。 面向对象编程(OOP):将设计转化为具体的代码实现。 方法区内存(Method Area):存储类的定义、静态变量以及编译时的常量。 栈内存(Stack Area):存储方法的局部变量和代码片段。 堆内存(Heap Area):存储动态创建的对象实例。
发布日期:2021-05-14 14:25:24
浏览次数:17
分类:精选文章
本文共 2758 字,大约阅读时间需要 9 分钟。
面向对象编程入门
面向对象的基本概念
在编程领域,面向对象和面向过程是两种不同的编程范式。面向过程(Procedural Programming)关注的是程序的执行流程,而面向对象(Object-Oriented Programming,简称OO)则关注的是对象之间的交互。
面向对象的核心思想是将程序中的数据和操作封装到独立的对象中,每个对象都可以封装其自身的状态和行为,从而使程序更易于理解和维护。
面向对象的优缺点
优势:
- 低耦合度:对象之间通过接口或抽象类连接,减少了直接调用方法的耦合度。
- 高扩展性:面向对象更容易支持程序的扩展和维护。
- 易于复用:可以通过继承和多态将已有的代码复用到新项目中。
缺点:
- 开发成本高:面向对象需要进行大量的系统分析和设计。
- 复杂性:面向对象的程序通常比面向过程的程序复杂。
面向对象的三大特征
面向对象的三大特征是封装、继承和多态。这些特征使得面向对象具有高度的可扩展性和复用性。
面向对象的设计原则
面向对象编程中有六大设计原则,通常被称为“六大原则”或“设计模式六大原则”:
面向对象的生命周期
面向对象的开发流程通常包括以下几个阶段:
类与对象的关系
类是什么?
- 类是现实世界中抽象出来的一种模板,它描述了一个事物的共同特征。
- 类可以看作是人类大脑在思考过程中对一类事物的抽象和总结。
- 类的主要作用是描述对象的状态和行为。
类的组成部分
- 属性(Attributes):描述对象的状态信息,通常采用变量的方式定义。
- 方法(Methods):描述对象的行为信息。
对象是什么?
- 对象是现实世界中的具体个体,它具有独立的生活,并与其他对象发生交互。
- 对象是类实例化的结果,通常用
new
运算符创建。
类与对象的关系
- 类是对象的模板,通过实例化操作生成对象。
- 对象是类的具体实例,具有独立的状态和行为。
Java中的引用数据类型
在Java中,所有的.class文件都是引用数据类型。常见的引用数据类型包括:
- String:字符串类型,由字符串类提供。
- Student:程序猿自定义的学生类。
引用机制
- 在Java中,对象是通过引用访问的。引用是一个变量,保存了对象在堆内存中的内存地址。
- Java不允许直接操作堆内存,只能通过引用间接访问对象内部的实例变量。
Java内存模型
Java的内存模型包括三个主要的内存区域:
对象的内存分配
- new运算符:用于在堆内存中创建对象,返回对象的引用。
- 引用:引用是一个变量,只是保存了对象的内存地址。
垃圾回收机制
- Java的垃圾回收器自动管理堆内存中的对象。
- 当没有任何引用指向一个对象时,该对象会被垃圾回收器回收。
Java中的变量分类
- 局部变量:在方法体内声明的变量,存储在栈内存中。
- 成员变量:在类体内定义的变量,分为实例变量和静态变量。
- 实例变量:前面没有static修饰符,存储在堆内存中。
- 静态变量/类变量:前面有static修饰符,存储在方法区内存中。
内存管理
- 栈内存:存储方法的局部变量,线程私有。
- 堆内存:存储对象实例,唯一性强调。
- 方法区内存:存储类信息和静态变量,只有一个。
垃圾回收条件
- 没有任何引用指向某个堆内存中的对象时,该对象会被垃圾回收器回收。
常见错误示例
以下程序编译可以通过,但运行会抛出NullPointerException
:
public class OOTest04 { public static void main(String[] args) { Customer c = new Customer(); System.out.println(c.id); // 输出Customer对象的id字段 c = null; // 将c引用设置为null System.out.println(c.id); // 调用null引用时会抛出NullPointerException }}
原因分析
- 在第一行
Customer c = new Customer();
中,创建了一个Customer对象,并将其赋值给变量c。 - 在第二行
System.out.println(c.id);
中,输出了c的id字段。 - 在第三行
c = null;
中,将c引用设置为null。 - 在第四行
System.out.println(c.id);
中,尝试访问null引用,导致NullPointerException异常。
解决方法
- 在第三行后,可以使用
System.gc()
方法来触发垃圾回收器,将不再被引用访问的对象回收。 - 或者在第三行后,可以使用
System.out.println("c引用已经被设置为null了");
来避免调用null引用。
通过以上内容的学习和理解,你应该对面向对象编程有了更深入的理解。如果有任何疑问,欢迎在下文中提出!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月22日 21时27分06秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
echarts 基本图表开发小结
2019-03-11
二分查找.基于有序数组的查找方法.704
2019-03-11
制作JS验证码(简易)
2019-03-11
adb通过USB或wifi连接手机
2019-03-11
泛型机制 Generic
2019-03-11
包装类
2019-03-11
JDK9-15新特性
2019-03-11
集合继承结构
2019-03-11
LinkedList 实现类
2019-03-11
Vector 实现类
2019-03-11
HashMap类、HashSet
2019-03-11
HashTable类
2019-03-11
TreeSet、TreeMap
2019-03-11
ObjectInputStream、ObjectOutputStream
2019-03-11
JVM内存模型
2019-03-11
反射机制
2019-03-11
反射Field、Method、Constructor
2019-03-11
可变长度参数
2019-03-11
堆空间常用参数总结
2019-03-11