第十章 面向对象思考

类的抽象和封装

  • 类的抽象是指将类的实现和类的使用分离开
  • 类的封装是指实现的细节被封装并且对用户隐藏

面向对象的思想

  • 面向过程的范式重点在于设计方法
  • 面向对象的范式将数据和方法融合在一起构成对象,重点在对象以及对象上的操作

类的关系

  • 类之间的关系通常有关联,聚合,组合以及继承

关联

  • 关联是一种常见的二元关系,描述两个类之间的活动
    在这里插入图片描述

  • 关联右两个类之间的实线表示,可以有一个可选的标签描述关系
    在这里插入图片描述

  • 可以通过数据域以及方法来实现关联

聚集和组合

  • 聚集是关联的一种特殊形式,代表了两个对象之间的归属关系
  • 所有者对象成为聚集对象,它的类称为聚集类
  • 从属对象称为被聚集对象,它的类称为被聚集类
  • 如果被聚集对象的存在依赖于聚集对象,称这两个对象之间的关系为组合
  • 组合暗示了独占性的拥有
  • 局机关系通常被标识为聚集类中的一个数据域
  • 聚集可以存在于同一类的对象之间

设计栈类

  • 栈是一种以后进先出的方式存放数据的数据结构
    在这里插入图片描述

  • UML图:
    在这里插入图片描述

public class TestStackOfIntegers {
  public static void main(String[] args) {
    StackOfIntegers stack = new StackOfIntegers();
    
    for (int i = 0; i < 10; i++)
      stack.push(i);
    
    while (!stack.empty())
      System.out.print(stack.pop() + " ");  
  }
}

public class StackOfIntegers {
  private int[] elements;
  private int size;
  public static final int DEFAULT_CAPACITY = 16;

  /** Construct a stack with the default capacity 16 */
  public StackOfIntegers() {
    this(DEFAULT_CAPACITY);
  }

  /** Construct a stack with the specified maximum capacity */
  public StackOfIntegers(int capacity) {
    elements = new int[capacity];
  }

  /** Push a new integer into the top of the stack */
  public void push(int value) {
    if (size >= elements.length) {
      int[] temp = new int[elements.length * 2];
      System.arraycopy(elements, 0, temp, 0, elements.length);
      elements = temp;
    }

    elements[size++] = value;
  }

  /** Return and remove the top element from the stack */
  public int pop() {
    return elements[--size];
  }

  /** Return the top element from the stack */
  public int peek() {
    return elements[size - 1];
  }

  /** Test whether the stack is empty */
  public boolean empty() {
    return size == 0;
  }

  /** Return the number of elements in the stack */
  public int getSize() {
    return size;
  }
}

将基本数据类型作为对象处理

  • 基本数据类型不是对象,但是可以使用Java API中的包装类来包装成一个对象
  • 既可以用基本数据类型值也可以用表示数值的字符串来构造包装类

  • 包装类没有无参构造方法
  • 所有包装类的实例都是不可变的,意味着一旦创建对象后,它们的内部值就不能再改变

基本数据类型和包装类类型之间的自动转换

  • 根据上下文环境,基本数据类型值可以使用包装类自动转换成一个对象,反之也可以,这称为自动装箱自动拆箱
  • 将基本类型值转换为包装类对象的过程称装箱
  • 相反的过程称拆箱

String类

  • String对象是不可变的,字符串一旦创建,内容不能再改变

构造字符串

  • 语法:String message = new String("Welcome to Java");
  • Java将字符串字面值看作String对象:String message = "Welcome to Java";
  • String变量存储的是对String对象的引用,String对象里存的才是字符串的值

不可变字符串与驻留字符串

  • String对象是不可变的,它的内容是不能改变的
  • 对具有相同字符序列的字符串字面值使用同一个实例,称为驻留的字符串
    在这里插入图片描述

替换和拆分字符串

在这里插入图片描述
在这里插入图片描述

字符串与数组之间的转换

  • 方法:.toCahrArray( )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值