第5章 标准类库与常用算法
88、(P237) java.lang程序包:java.lang程序包是Java语言和运行环境的核心,其内包含一些标准类,如Object类、String类和Math类等。Java编译器把该程序包自动引入到每个源程序,而无需编程者使用 import 语句引入。
89、(P238) Object类:在Java中,Object类是所有类的最终祖先,这里所指的“所有类”,即不管是Java系统提供的类,还是用户自行编写的类,它们都是从Object类中直接或间接地继承而来的。当编程者在定义一个类时若没有使用extends指明它的父类,则编译器认为该类从Object类继承而来。
90、(P238 - P239) 深度比较和浅度比较:Object类有equals()方法如下:public boolean equals(Object obj) {......} ,该方法是把当前对象与参数对象obj比较,此时的比较是判断这两个对象所封装的信息是否完全一样,称为“深度比较”(deep comparison)。使用==运算符的比较,则称为“浅度比较”, 关系式 o1 == o2 只判断这两个引用是否指向同一个对象,所以说浅度比较是在对象的引用变量之间进行的。
91、(P241) 对象引用变量:在Java中,每个对象的引用变量都对应一个惟一确定的正整数,它的数据长度是4个字节,通常用16进制表示,如fc799b2d,称为“散列码”,换句话说,散列码就是对象引用变量的值。Object类还提供了一个读取某对象散列码的方法函数hashCode()。当用引用变量访问它所指的对象时,都是把引用变量转换成对应的散列码再去访问该对象。
92、(P245) 克隆对象:如前所述,某个类的对象和指向它的引用变量是两个实体。当制作某个类对象的一个副本时,用如下方法:
UDate end = new UDate(2003, 1, 31); UDate endcopy = end; 将使得两个引用变量end和endCopy指向同一个对象UDate(2003, 1, 31) ,即产生了“别名”问题。也就是说,通过这两个引用变量所访问的都是同一个对象,若通过endCopy修改对象的内容,再用end读出该对象的内容则会发现它与endCopy是完全一样的。 如果希望endcopy成为一个新对象的引用变量,而且开始时与 end 所指对象的内容完全一样,而以后可以自由地修改而不影响 end 所指的对象, 则就需要“克隆对象”。为此, Object类提供了一个clone() 方法。 注意:不是每个类都自动默认具有克隆能力,被克隆对象所属的class类型必须实现了java.lang.Cloneable接口; 另外,不能随意克隆其他类的对象,只能克隆其继承链上的对象。
93、(P249) Math类:它是一个最终类,包含有实现基本数值运算,如取绝对值、最大值、最小值、随机数、四舍五入、向下舍入、自然指数、对数、平方根、三角函数和反三角函数。还有两个类常量字段 E 和 PI 。Math类还包含一个很有用的random() 方法,它是一个随机数发生器,返回一个0.0到1.0之间的实数。不过,需要更灵活的随机数发生器可使用java.util.Random类。
94、(P249 - P254) String类和StringBuffer类:String类对象的内容是不能修改的,即它是一个字符串常量。若编程者希望把字符串存放在可以修改内容的类中,则应采用StringBuffer类,但是,在传送、通信和输出显示字符串之前,仍然应该转换成String类。String类的对象可以直接用字符串常量进行初始化, 如: String s = "bar"; 它等价于 String s = new String("bar");
95、(P254) java.util程序包: a) 四种基本的数据结构 --- 集合、线性结构、树型结构、图状结构。其中集合中的元素只存在“同属于一个集合”的关系;线性结构中的元素具有一一对应的关系;树型结构中的元素具有一对多的关系;图状结构的元素具有多对多的关系。 b) java.util程序包中提供了一系列描述数据结构的实用化类和接口。同时还提供了若干个十分有用的类,如标准化日期类、阳历类和日历类。还有能可靠移植的随机数发生器类(Random)和字符串分解器类(StringTokenizer)。 (P257) java.util程序包还拥有抽象窗口工具箱AWT中的事件控制的顶级类EventObject, 还有Java语言所有错误和异常处理的顶级类Throwable等。
96、(P267 - P268) 集合: Java在java.util程序包中定义了几种类型的集合 Vector类(向量)、BitSet类(二进制位集合)、Stack类(堆栈) 和
HashTable类(散列表) 等, 它们具有如下特点: a) 集合中所包含的元素实际上都是Object类的引用变量。 b) 集合中的元素都是无类型的引用变量。在需要使用包容在集合中的对象时,必须对它的元素进行“造型”,让它转换成所需要的类型。 c) 对集合元素进行“造型”同样要遵循87条所述的对象引用造型转换规则。 d) 集合可以任意改变自身的大小,能方便地增加和删除元素。在创建一个集合时,不必预先知道它共有多少个元素,也不用担心添加的元素太多集合装不下。
97、(P268) 向量类:向量(Vector)是集合类型中应用最广的一种,它类似于一维的对象数组,但又是可扩充的对象数组,其内的元素可用一组整数来访问,例如: 向量对象名.elementAt(索引); 向量的大小是可变的,可通过调用其方法函数添加和删除元素进行扩充和缩小。