第十章 面向对象思考
10.1 类的抽象和封装
类的抽象是指将类的实现和类的使用分离开 ,实现的细节被封装并且对用户隐藏 , 这被称为类的封装。
10.2 面向对象的思考
面向过程的范式重点在于设计方法 。 面向对象的范式将数据和方法耦合在一起构成对象 。 使用面向对象范式的软件设计重点在对象以及对对象的操作上 。
面向过程范式重在设计方法 。 面向对象范式将数据和方法都组合在对象中 。 使用面向对象范式的软件设计重在对象和对象上的操作 。 面向对象方法结合了面向过程范式的功能以及将数据和操作集成在对象中的特性 。
在面向过程程序设计中,数据和数据上的操作是分离的,而且这种做法要求传递数据给方法 。 面向对象程序设计将数据和对它们的操作都放在一个对象中 。 这个方法解决了很多面向过程程序设计固有的问题 。 面向对象程序设计方法以一种反映真实世界的方式组织程序,在真实世界中,所有的对象和属性及动作都相关联 。 使用对象提高了软件的可重用性,并且使程序更易于开发和维护 。 Java 程序设计涉及对对象的思考,一个 Java 程序可以看作是一个相互操作的对象集合 。
10.3 类的关系
为了设计类 , 需要探究类之间的关系 。 类中间的关系通常是关联 、 聚合 、 组合以及继承 。
[统一建模语言(英语:Unified Modeling Language,缩写 UML]
UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
10.4 将基本数据类型值作为对象处理
基本数据类型值不是一个对象 ,但是可以使用 JavaAPI中的包装类来包装成一个对象 。
将 int 包装成 Integer 类 , 将 double 包装成 Double 类 , 将char 包装成 Character 类
10. 5 基本类型和包装类类型之间的自动转换
将基本类型值转换为包装类对象的过程称为装箱 ( boxing ) , 相反的转换过程称为开箱( unboxing) 。
Java 允许基本类型和包装类类型之间进行自动转换 。 如果一个基本类型值出现在需要对象的环境中 , 编译器会将基本类型值进行自动装箱 ; 如果一个对象出现在需要基本类型值的环境中,编译器会将对象进行自动开箱 。 这称为自动装箱和自动开箱 。
10.6 Biglnteger 和 BigDecimal 类
Biglnteger 类和 BigDecimal 类可以用于表示任意大小和精度的整教或者十进制數 。
10.7 String类
字符串是对象 , 可以通过 charAt(index) 方法从字符串中得到某个指定位置的字符 。 length()方法返回字符串的大小, substring 方法返回字符串中的子串 , indexOf 和 lastIndexOf 方法返回第一个或者最后一个匹配的字符或者子字符串 。
10.7.1 构造字符串
Sring变量存储的是对 String 对象的引用 , String 对象里存储的才是字符串的值 。 严格地讲 , 术语 String 变量 、 String 对象和字符串值是不同的 。 但在大多教情况下 ,它们之间的区别是可以忽略的 。 为简单起见 , 术语字符串将经常被用于指 String 变量 、String 对象和字符串的值 。
10.7.2 不可变字符串与限定字符串
String 对象是不可变的,他的内容是不能改变的。
因为字符串在程序设计中是不可变的,但同时又会频繁地使用 , 所以 Java 虚拟机为了提高效率并节约内存,对具有相同字符序列的字符串直接量使用同一个实例 。 这样的实例称为限定的 ( interned ) 字符串 。
s1 == s2 is false;
s1 == s3 is true;
10.7.3 字符串的替换和分隔
10.7.4 依照模式匹配、替换和分隔
matches
replaceAll replaceFirst split
tokens
10.7.5 字符串与数组之间的转换
字符串不是数组 ,但是字符串可以转换成数组 , 反之亦然 。
将字符串转换成一个字符数组 , 可以使用 toCharArray 方法 。
方法getChars(int srcBegin,int scrEnd,char[]dst,int dstBdgin)将下标从srcBegin到srcENd-1的子串复制到字符数组dst中下标dstBegin开始的位置。
10.7.6 将字符和数值转换成字符串
10.7.7 格式化字符串
10.7.8 StringBuilder和StringBuffer类
10.7.9 toString capacity length setLength charAt方法
如果超出构建器的容量 ,就用新的数组替換现有數组 。 新数组的大小为 2x ( 之前数组的长度 +1 ) 。