类的抽象和封装
- 类的抽象是指将类的实现和类的使用分离开
- 类的封装是指实现的细节被封装并且对用户隐藏
面向对象的思想
- 面向过程的范式重点在于设计方法
- 面向对象的范式将数据和方法融合在一起构成对象,重点在对象以及对象上的操作
类的关系
- 类之间的关系通常有关联,聚合,组合以及继承
关联
-
关联是一种常见的二元关系,描述两个类之间的活动
-
关联右两个类之间的实线表示,可以有一个可选的标签描述关系
-
可以通过数据域以及方法来实现关联
聚集和组合
- 聚集是关联的一种特殊形式,代表了两个对象之间的归属关系
- 所有者对象成为聚集对象,它的类称为聚集类
- 从属对象称为被聚集对象,它的类称为被聚集类
- 如果被聚集对象的存在依赖于聚集对象,称这两个对象之间的关系为
组合
- 组合暗示了独占性的拥有
- 局机关系通常被标识为聚集类中的一个数据域
- 聚集可以存在于同一类的对象之间
设计栈类
-
栈是一种以后进先出的方式存放数据的数据结构
-
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( )