4. 面向对象

4. 面向对象

4.1 面向对象

面向对象程序设计,简称OOP是当今主流的程序设计范型。Java是完全面向对象的。

面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。程序中的很多对象来自标准库,还有一些是自定义的。在OOP中,不必关心对象的具体实现,只要能够满足用户的需求即可。

面向对象是一种思想,能让复杂问题简单化,程序员不需要了解具体的实现过程,只需要指挥对象去实现功能。

4.1.1 类

类:对现实生活中事物的描述。

类是构造对象的模板或蓝图。由类构造对象的过程称为创建类的实例。

封装是与对象有关的一个重要概念。从形式上看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据称为实例域,操纵数据的过程称为方法。对于每个特定的类实例(对象)都有一组特定的实例域值。

  • 类关系UML符号对照表:

image-20200901003229425

4.1.2 对象

对象:就是事物,实实在在存在的个体。

要想使用OOP,一定要清楚对象的三个主要特性:

  • 对象的行为 -- 可以对对象施加哪些操作/方法
  • 对象的状态 -- 当施加方法时,对象如何响应
  • 对象标识 -- 如何辨别具有相同行为与状态的不同对象

4.1.3 类之间的关系

  • 依赖:users-a
  • 聚合:has-a
  • 继承:is-a

4.2 用户自定义类

4.2.1 构造器

  • 构造器与类同名

  • 每个类可以有一个以上的构造器

  • 构造器可以有0个、1个或多个参数

  • 构造器没有返回值

  • 构造器总是伴随着new操作一起调用

4.2.2 隐式参数与显示参数

显示参数明显地列在方法声明中,隐式参数没有在方法声明中。

在每一个方法中,关键字this表示隐式参数。

4.2.3 final实例域

可以将实例域定义为final。构建对象时必须初始化这样的域。必须确保在每一个构造器执行之后,这个域的值被设置,并且在后面的操作中,不能够再对它进行修改。

final修饰符大都应用于基本类型域,或不可变类的域中的每个方法都不会改变其对象,这种类就是不可变的类。

4.3 静态域与静态方法

4.3.1 静态域

如果将域定义为static,每个类中只有一个这样的域。而每一个对象对于所有的实例域却都有自己的一份拷贝。

4.3.2 静态常量

由于每个类对象都可以对公有域进行修改,所以,最好不要将域设计为public。

4.3.3 静态方法

静态方法是一种不能向对象实施操作的方法。

4.4 对象构造

4.4.1 重载

一个类可以有多个构造器。

StringBuilder messages = new StringBuilder();

StringBuilder todoList = new StringBuilder("To Do:
");

上面的特征叫做重载。多个方法有相同的名字不同的参数,便产生了重载。

Java允许重载任何访法,而不只是构造器方法。

4.4.2 默认域初始化

如果在构造器中没有显式地给域赋予初值,那么就会被自动地赋为默认值:数值为0、布尔值为false、对象引用为null。

4.4.3 无参数的构造器

很多类都包含一个无参数的构造函数,对象由无参数构造函数创建时,其状态会设置为适当的默认值。仅当类没有提供任何构造器的时候,系统才会提供一个默认的构造器。如果在编写类的时候,给出了一个构造器,哪怕是和简单的,要想让这个类的用户能够构造实例new ClassName(),就必须提供一个默认的构造器(不带参数的构造器)。

4.4.4 关键字this

  • 关键字this引用方法的隐式参数。

  • 如果构造器的第一个语句为:this(…),这个构造器将调用同一个类的另一个构造器。

  • public Demo(double s) {
        // calls Demo(String, double)
        this("Demo #" + nextId, s);
        nextId++;
    }
    

    当调用new Demo(6000)时,Demo(double)构造器将调用Demo(String, double)构造器。

4.4.5 对象析构与finalize方法

在析构器重,最常见的操作是回收分配给对象的存储空间。对于Java有自动的垃圾回收器,不需要人工回收内存,所以Java不支持析构器。当然,某些对象使用了内存之外的其他资源。在这种情况下,当资源不再需要时,将其回收和再利用将显得十分重要。

可以为一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用。

4.5 注释

关于注释,前文已经略有讲到,此处就不过多赘述,本节主要是拿出几个重要地方记录下来。

4.5.1 方法注释

  • @param变量描述:对当前方法的“param”参数部分添加一个条目。
  • @return描述:对当前方法添加“return”返回部分。
  • @throws类描述:将添加一个注释,用于标识这个方法有可能抛出异常。

4.5.2 通用注释

  • @author姓名:将产生一个作者条目
  • @version文本:将产生一个版本条目
  • @since文本:始于条目
  • @deprecated文本:对类、方法或变量添加一个不再使用的注释。
  • @see引用

4.6 类设计技巧

  1. 一定要保证数据私有
  2. 一定要对数据初始化
  3. 不要在类中使用过多的基本类型
  4. 不是所有的域都需要独立的域访问器和域更改器
  5. 将职责过多的类进行分解
  6. 类名和方法名要能够体现它们的职责
  7. 优先使用不可变得类
都说酒是陈的香。
原文地址:https://www.cnblogs.com/yihangjou/p/13593883.html