java 之类库
一、String、StringBuffer、StringBuild 类
鉴于 String 类的对象一旦声明,则不可修改,String 类对象使用“+”进行字符串连接。为了解决字符串堆内存中不可修改的问题,Java 提供了 StringBuffer 类,使用 append()进行字符串连接。
观察 String 类、StringBuffer 类和 StringBuilder 类的继承关系
String 类:
StringBuffer 类:
StringBuilder 类:
String、StringBuffer 和 StringBuilder 类是 CharSequence 接口的子类,这是共同点,因此,有着许多功能相同的方法。
观察以下 StringBuffer 中的方法,研究源码,是一个提高算法的好方式。
反转:public StringBuffer reverse()
插入:public StringBuilder insert(int offset,数据类型 变量)
删除部分数据:public StringBuilder delete(int start,int end)
StringBuilder 类
该类与 StringBuffer 类几乎一样。StringBuffer 源自 jdk1.0,方法几乎是同步操作,属于安全的线程操作。StringBuilder 源自 jdk1.5,方法是非同步操作,属于非安全的线程操作。
二、Runtime 类
每个 Java 应用程序都会有一个单例的 Runtime 对象,功能就是提供一些 Java 程序运行有关的信息和创建新的进程。其中包括堆内存初始化大小和最大堆内存大小。
类中常用方法:
垃圾回收(System 类中 gc()方法调用就是该类方法):public void gc()
执行进程指令:public Process exec(String command)throws IOException
获取 jvm 可用进程数:public native int availableProcessors()
调用垃圾回收:public native void gc()
进程中止:public void halt(int status)
jvm 可用最大堆内存:public native long totalMemory()
jvm 最大堆内存空间:public native long maxMemory()
由此方法可以得知操作系统下所允许的最大堆内存空间,随着 jdk 的不断升级,最大内存空间也在不断变大。因此,这也是一个升级 jdk 版本很好的理由。
*对于 Runtime 类,在 GC 回收机制中使用广泛。
*Runtime 类也是单例设计模式的实际应用。
三、System 类
Java 提供的获取程序运行系统信息和处理 IO 流的类。
常用方法:
数组拷贝:public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
获取系统当前时间(毫秒为单位):public static long currentTimeMillis()
垃圾回收(实际调用 Runtime 类的 gc()方法):public static void gc()
对象的产生,调用构造方法,进行初始化操作。但是为了能够在对象垃圾回收之前进行相关处理,则可以覆写 Object 类中的 finalize()方法。
四、对象克隆
对象克隆就是对已有对象进行复制操作。Object 类中提供了以下克隆方法进行克隆操作。但需要对象类实现 java.lang.Cloneable 克隆接口。否则,会抛出不支持克隆异常。
protected native Object clone() throws CloneNotSupportedException
五、Math 类
Java 中专门进行数学计算的类,提供了一系列中进行数学计算的方法。
这里需要注意四舍五入的方法,负数与正数的四舍五入方式不同,进行负数四舍五入的时候,操作的小数位大于 0.5 才进位,小于或等于 0.5 不进位:
public static long round(double a)
以上方法不建议使用,精度不够。
六、Random 类
java.util.Random 是取得随机数的类,验证码功能便可以利用该类实现。
七、BigInteger 类
当进行计算的整数超过了基本数据类型的范围,为了能够实现计算,Java 提供了 BigInteger 类进行整数的保存和处理。
需要注意除法操作:
整除:public BigInteger divide(BigInteger val)
除法计算,使用数组保留商和余数:public BigInteger[] divideAndRemainder(BigInteger val)
八、BigDecimal 类
类似 BigInteger 类,提供 BigDecimal 类进行小数的保存和处理。同时,也可使用该类进行精确的四舍五入计算。
除法方法:
@Deprecated(since="9")
public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
divisor:被除数
scale:保留小数位数
roundingMode:进位模式(四舍五入:public static final int ROUND_HALF_UP)
九、Date
Java 中提供了 java.util.Date 类进行日期相关操作。
十、SimpleDateFormat
Java 中提供了一个针对日期进行格式转换的类。该类为 java.text.SimpleDateFormat。同时,提醒的是,java.text 是一个进行国际化的开发包。
十一、Calendar 类
Java 提供了日历类,类似于 Date 类,对日期进行操作。使用日历类可以相对容易的进行日期相加。
十二、比较器
1、Arrays 类
Java 提供的一个专门针对数组操作的类。
注意以下方法:
数组排序(参数的数据类型,必须是实现 Comparable 接口的子类,因排序需进行对象比较):
public static void sort(数据类型[] a)
二分查找(前提条件是数组已排序,返回结果是索引值):
public static int binarySearch(数据类型[] a,数据类型 key)
数组比较(与 Object 类中的 equals 方法不同):
public static boolean equals(boolean[] a,boolean[] a2)
填充(也即全部覆盖):
public static void fill(数据类型[] a,数据类型 val)
获取数据:
public static String toString(数据类型[] a)
2、Comparable 接口
Comparable 接口定义对象比较的规则,对于业务需求开发,较少遇到,但是,深入底层,则会使用到。
代码定义:
public interface Comparable
抽象方法:
int compareTo(T o)
由上可知,String 类实现了 Comparable 接口,可以进行对象比较。因此,实现对象比较,定义的类实现 Comparable 接口,覆写 compareTo()方法。
*在类集框架中的 Set 接口,其 TreeSet 子接口就是实现 comparable 接口,进行对象比较,避免重复数据的保存。
实际发现,Comparable 接口并不能够实现真正意义上的对象比较,HashSet 就无法实现对象比较,它只能够在有序排序的情况下,才会使用的对象比较。
3、二叉树(BinaryTree)(数据结构思想体现)
二叉树原理,选择一个数据作为根节点,然后比这个数据小的放置于根节点的左子树,比这个数据大的被放置于根节点的右子树,使用中序遍历的方式取出所有数据。
*Oracle 数据库中的索引也是使用二叉树原理。
图 二叉树原理
4、挽救的比较器(Comparator)
对于已经定义好的简单 Java 类,并未设计对象比较,未实现 Comparable 接口。而此时突然出现了需要增加对象比较的需求,也即排序,同时又不能修改简单 Java 类实现 Comparable 接口。在这样的情况下,Java 提供了一个工具,java.util.Comparator 接口实现挽救的比较。只需要定义一个类实现 Comparator 接口,然后定义简单 Java 类的比较规则。最后使用 Arrays.sort()方法,即可实现排序。
十三、正则表达式
正则表达式是对字符串进行操作的方法。在 Java 中,诸如代码生成器便是用正则表达式实现的。Java 提供了开发包 java.util.regex 实现正则表达式支持。该包下提供了两个类:
Matcher:通过 Pattern 类中 public Matcher matcher(CharSequence input)方法获得对象
Pattern:使用 public static Pattern compile(String regex)方法取得实例化对象,主要目的编译正则表达式。
需要注意,正则表达式只能判断格式是否正确,但是不能判断内容的范围。
同时,String 类中提供了大量支持正则表达式的方法。
十四、其他开发类库
Apache Commons 是一个高度整合的工具类,以 java 类库为基础,进一步封装而成,使用该组件减少自我开发设计缺陷。
Google Guava 则是 Google 研发出的新型工具类,可以较好实现功能。
评论