工具类的设计

    1>工具类设计全都用public static 修饰

    此时只需要使用工具类名调用工具方法

    此时必须把工具类的构造器私有化,防止创建工具类的对象来调用静态方法

    2>如果工具方法没有用static修饰

    此时必须使用工具类的对象去调用工具方法

    此时把必须工具类设计为单例模式的

    一般出于简单考虑,首选第一种,如jdk中提供的工具java.Utils.Arrays包

    公共静态方法

    1. 1. 构造器私有化
    2. 2. 提供public static方法作为工具方法
    3. 调用者直接使用 工具类名.工具方法名称完成调用

    单例模式

    1. 最简单最常用的设计模式,单例的编写有N种写法
    2. 目的:保证在整个应用中某一个类有且只有一个实例(一个类在堆内存中只存在一个对象),单例设计模式的好处在于多个模块共享数据和工作方法

    饿汉式

    1. 1. 必须在类中,自己先创建出一个对象
    2. 2. 私有化自身的构造器,防止外界通过构造器创建新的工具类对象
    3. 3. 向外暴露一个公共的静态方法用于返回单例对象(提供一个公共静态方法,用于统一的外界访问方式,返回事先创建好的实例)
    4. 4.把工具方法作为实例方法附着到单例上
    5. **创建测试类测试单例设计模式**
    6. 1>单例访问
    7. 2>测试工具方法

    懒汉式(延迟单例的创建)

    1. 1.私有化构造方法
    2. 2.事先创建好当前类的一个对象
    3. 3.提供一个公共静态方法(用于统一的外界访问方式,返回事先创建好的实例)
    4. 4..把工具方法作为实例方法附着到单例上

    枚举法

    1. 1、使用EnumClass.values(),我们所用的常量可以一一列举出来,即枚举。
    2. 2、每一个常量可以附带信息和行为,封装性好方便使用。

    包装类

    1. 基本类型的包装类位于java.lang包中,基本数据类型和包装类对应关系:
    2. byte short int long float double char boolean
    3. Byte Short Integer Long Float Double Character Boolean
    4. 总结:1>实际开发中,我们会用封装思维把一些数据作为字段封装在类中,并提供方法对这些数据进行操作 2>模拟的int包装类intWrapper既可以表示0,也可以表示null
    5. 3>IntWrapper提供了用于对封装的value进行进一步的操作
    6. 除了IntegerCharacter外,其他都是基本数据类型的首字母大写

    装箱和拆箱

    1. //装箱:把基本数据类型 转成 对于包装类的过程就称为把基本数据类型装箱
    2. //拆箱:把包装类对象 转成 对应基本数据类型的过程就称为把包装类对象拆箱
    3. //自动装箱:把基本数据类型直接赋值给对于包装类对象的过程
    4. //自动拆箱:把包装类对象直接赋值给对应的基本数据类型

    包装类的缓存设计

    1. 总结: 包装类为了提高性能,事先已经创建好了很多Integer对象,放入Integer类的cache缓存数组中,
    2. 如果开发者通过Integer.valueOf(n),创建对象时,n在[-128,127]之间的数,直接从缓存数组cache中获取,如果n的值超过了范围,直接new Integer(n);
    3. ByteShortIntegerLong:缓存范围[-128127];
    4. Character:缓存范围[0127];

    BigDecimal

    1. BigDecimal不能直接把赋值和运算操作,只有通过构造器传递数据,必须使用字符串类型的构造器,操作BigDecimal主要是加减乘除四个操作

    精度控制 和 除不尽问题

    1. // 1.保留位数和精度控制
    2. // RoundingMode 舍入模式
    3. // RoundingMode.HALF_UP 四舍五入(常用)
    4. // 2. 除不尽问题
    5. // 报错原因: 10.0 / 3.0 除不尽(3.333333333...333...)