写点什么

java 之类库

作者:andy
  • 2022-10-28
    北京
  • 本文字数:3033 字

    阅读完需:约 10 分钟

一、String、StringBuffer、StringBuild 类


鉴于 String 类的对象一旦声明,则不可修改,String 类对象使用“+”进行字符串连接。为了解决字符串堆内存中不可修改的问题,Java 提供了 StringBuffer 类,使用 append()进行字符串连接。

观察 String 类、StringBuffer 类和 StringBuilder 类的继承关系


String 类:


public final class Stringextends Objectimplements Serializable, Comparable<String>, CharSequence
复制代码


StringBuffer 类:


public final class StringBufferextends Objectimplements Serializable, CharSequence
复制代码


StringBuilder 类:


public final class StringBuilderextends Objectimplements Serializable, CharSequence
复制代码


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 研发出的新型工具类,可以较好实现功能。


用户头像

andy

关注

还未添加个人签名 2019-11-21 加入

还未添加个人简介

评论

发布
暂无评论
java之类库_andy_InfoQ写作社区