Java 基础类库(常用类)

    xiaoxiao2025-07-15  7

    本文包含如下内容:

    Object 类Java 7 新增的类String、StringBuffer、StringBuilder 类Math 类Java 7 的ThreadLocalRandom 与 RandomBigDecimal 类

    1. Object 类

    Object 类是所有类、数组、枚举类的父类,也就是说,Java 允许把任何类型的对象赋给 Object 类型的变量。当定义一个类时没有使用extends 关键字为它显式指定父类,则该类默认继承 Object 父类。

    所有Java 对象都可以调用 Object 类的方法。 Object 类的常用方法如下:

    取得对象信息的方法:toString() 该方法在打印对象时被调用,将对象信息变为字符串返回,默认输出对象地址。

    .对象相等判断方法:equals() 该方法用于比较对象是否相等,而且此方法必须被重写。

    对象签名:hashCode() 该方法用来返回其所在对象的物理地址(哈希码值),常会和equals方法同时重写,确保相等的两个对 象拥有相等的.hashCode。

    getClass()返回一个Class对象,如果打印出来会发现结果是如下格式

    class package.name.xxx

    finalize() :当系统中没有引用变量引用到该对象时,垃圾回收机制调用此方法来清理该对象的资源。

    clone() :用于得到一个对象的副本,Object 提供的 clone() 方法使用了 protected 修饰,因此该方法只能被子类重写或调用。 自定义类实现克隆的步骤如下: 程序中粗体字1行 输出为 false,粗体字 2 行输出为 true 。 上面程序的内存示意图如下: clone() 机制比较高效,其速度比静态的 copy 方法快近 2 倍。 上述Object 的克隆属于 “浅克隆” 。它只克隆该对象的所有成员变量,不会对引用类型的成员变量值所引用的对象进行克隆。 而对于深克隆,需要保证所有引用类型的成员变量值所引用的对象都被复制了。

    2. Java 7 新增的Object 类

    工具类的命名习惯是末尾添加一个 s,比如操作数组的工具类是 Arrays, 操作集合的工具类是 Collections。 下面程序示范了 Objects 工具类的用法:

    3.String、StringBuffer、StringBuilder 类

    String 类是不可变类,即一旦一个 String 对象被创建后,对象中的字符序列是不可改变的,直至对象被销毁。 StringBuffer 对象则代表一个字符序列可变的字符串,可通过添加删除方法对其操作。生成了最终想要的字符串之后,可以调用toString() 方法将其转为String 对象。

    JDK 1.5 新增了一个StringBuilder 类,也代表字符串对象,与StringBuffer 类似,

    StringBuilder 和 StringBuffer 区别: 不同的是,StringBuffer 是线程安全的,而StringBuilder没有实现线程的安全功能,所以性能略高,通常情况下,优先考虑使用。 String 类是可变的,String 的实例一旦生成就不会再改变了,例如下面代码: 上面程序中,因为String 是不可变的,所以会额外产生很多临时变量,使用StringBuffer 和StringBuilder 就可以避免这个问题。

    以下是StringBuilder 和 StringBuffer 代码使用示例:

    4. Math 类

    详情查看API 文档

    5. java 7 的 ThreadLocalRandom 与 Random

    Random 类完全拥有生成一个伪随机数,它有两个构造器:一个构造器使用默认的种子;一个构造器需要程序员显式传入一个 Long 型整数的种子。

    ThreadLocalRandom 是 Java 7 新增的类,使用它可以减少多线程资源竞争,保证系统具有更好的线程安全性。 Random 使用一个 48 位的种子,如果这个类的两个实例是同一个种子创建的,对它们以同样的顺序调用方法,则它们会产生相同的数字序列。 在下面实验中,当两个Random 对象种子相同时,它们会产生相同的数字序列。当使用默认的种子构造Random 对象时,它们属于同一个种子。 运行上面程序,得到如下结果: 可见,只要两个 Random 对象的种子相同,调用顺序也相同,就会产生相同的数字序列。即Random 产生的数字并不是真正随机的,而是一种伪随机。

    为避免两个 Random 对象产生相同的数字序列,通常推荐使用当前时间作为Random 对象的种子,如下面代码所示:

    Random rand = new Random(System.currentTimeMillis());

    多线程环境下使用 ThreadLocalRandom 的方法与使用 Random 基本类似,如下面程序所示:

    6. BigDecimal 类

    float、double 类型的浮点数容易引起精度丢失。如下程序所示: 为了精确计算浮点数,Java 提供了 BigDemical 类,该类提供了大量构造器用于创建 BigDemical 对象,包括把所有基本数据类型变量转换成一个 BigDemical 对象,也包括利用数字字符串、数字字符串数组来创建 BigDemical 对象。

    BigDemical 类的构造器:

    BigDemical(double val)构造器: BigDemical(String val) BigDemical 类的基本运算: 上面程序中 f1 是基于 “0.05”字符串创建的BigDemical 对象,f3 是基于 0.05 的 double 浮点数。 上面程序运行结果为: 因此创建 BigDemical 对象时,一定要使用 String 对象作为构造器参数,而不是 double 数字(会精度丢失)。 上面程序运行结果如下:
    最新回复(0)