# 源码中的工具类与函数

返回:源码

Object,Enum,包装类,Comparable,Arrays,Thread,System,Math,BigInteger,Random,日期时间,Throwable,String,Collections,正则

# 一. Object类

返回顶部

# 非静态方法需对象调用

  • public String toString():把一个对象的信息用一个字符串表示,尽量要能够简单易懂,建议子类重写
  • public Class<?> getClass():获取对象的“运行时”类型
  • public void finalize():当一个对象被确定为垃圾时,由GC垃圾回收器来进行调用,每一个对象的- finalize()方法只会被调用一次
  • public int hashCode():返回一个对象的hashCode值

# 常规协定

  • 如果一个对象的参与计算hashCode值的成员变量没有修改,那么在程序运行期间,每次获取的hashCode值不变。
  • 如果两个对象hashCode不同,那么这两个一定不“相等”
  • 如果两个的hashCode值相同,那么这两个对象不一定“相等”
  • 如果两个相等,那么他们的hashCode值一定要相同。
  • public boolean equals(Object obj):用于判断当前对象与指定对象是否相等

默认的实现,等价于“==”,比较对象的内存地址。

子类可以选择重写,重写有一些要求及原则:重写equals时,一定要重写hashCode方法。一致性、对称性、自反性、传递性、非空对象与null的equals一定是false

  • protected Object clone()throws CloneNotSupportedException :获取一个对象的克隆体对象

所有类型都可以重写这个方法,它是获取一个对象的克隆体对象用的,就是造一个和当前对象各种属性值一模一样的对象。当然地址肯定不同

调用此方法必须实现java.lang.Cloneable接口。

# 二. 枚举

返回顶部

  • toString():默认返回的是常量名(对象名),可以继续手动重写该方法
  • name():返回的是常量名(对象名)
  • ordinal():返回常量的次序号,默认从0开始
  • values():返回该枚举类的所有的常量对象,返回类型是当前枚举的数组类型,是一个静态方法
  • valueOf(String name):根据枚举常量对象名称获取枚举对象

# 三. 包装类

返回顶部

大部分方法为静态方法,可用类名调用

# 1、基本数据类型和字符串之间的转换

  • String str = String.valueOf(xxx);把基本数据类型转为字符串
  • 除了Character类之外,其他所有包装类都具有parseXxx静态方法`int a = Integer.parseInt("整数的字符串");String转换成对应的基本类型
  • 把字符串转为包装类,然后可以自动拆箱为基本数据类型,(返回值类型是包装类)int a = Integer.valueOf("整数的字符串");把字符串转为包装类

# 2、数据类型的最大最小值

  • Integer.MAX_VALUE和Integer.MIN_VALUE:返回对应类型的最大/小常量值

# 3、字符转大小写

  • Character.toUpperCase('x');——字符转大写
  • Character.toLowerCase('X');——字符转小写

# 4、整数转进制

  • Integer.toBinaryString(int i)——整数转二进制
  • Integer.toHexString(int i)——整数转十六进制
  • Integer.toOctalString(int i)——整数转八进制

# 四. 接口Comparable,Comparator

返回顶部

  • int compareTo(Object obj);——根据对象属性的值按自然排序
    • 第一步:哪个类的对象要比较大小,哪个类就实现java.lang. Comparable接口,并重写方法
    • 第二步:对象比较大小时,通过对象调用compareTo方法,根据方法的返回值决定谁大谁小。
    • 接口规定:返回值大于0调用对象大于指定对象,小于0就小于指定对象,等于0就两个对象值相等
      • (java.util.Arrays数组工具类的public static void sort(Object[] a)就是这么实现的)
  • int compare(Object o1,Object o2);——根据对象属性的值按定制排序
    • 第一步:编写一个类,我们称之为比较器类型,实现java.util. Comparator接口,并重写方法
    • 第二步:比较大小时,通过比较器类型的对象调用compare()方法,将要比较大小的两个对象作为compare方法的实参传入,根据方法的返回值决定谁大谁小。
      • o1对象大于o2返回正整数
      • o1对象小于o2返回负整数
      • o1对象等于o2返回零

(java.util.Arrays数组工具类的public static <T> void sort(T[] a, Comparator<? super T> c)就是这做的)

  • java.lang.Cloneable接口,和Object类配合使用——用于复制对象

# 五. 类 Arrays

返回顶部

# 全部为静态方法

此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。而且如下每一个方法都有各种重载形式,以下只列出int[]类型的,其他类型的数组类推。其可按照参数类型按升序排序,还可指定范围按升序进行排序。

  • static int binarySearch(int[] a, int key)——要求数组有序,在数组中查找key是否存在,如果存在返回第一次找到的下标,不存在返回负数
  • static int[] copyOf(int[] original, int newLength)——根据original原数组复制一个长度为newLength的新数组,并返回新数组
  • static int[] copyOfRange(int[] original, int from, int to)——复制original原数组的[from,to)构成新数组,并返回新数组
  • static boolean equals(int[] a, int[] a2)——比较两个数组的长度、元素是否完全相同
  • static void fill(int[] a, int val)——用val填充整个a数组
  • static void fill(int[] a, int fromIndex, int toIndex, int val)——将a数组[fromIndex,toIndex)部分填充为val
  • static void sort(int[] a)——将a数组按照从小到大进行排序
  • static void sort(int[] a, int fromIndex, int toIndex)——将a数组的[fromIndex, toIndex)部分按照升序排列
  • static String toString(int[] a)——把a数组的元素,拼接为一个字符串,形式为:[元素1,元素2,元素3。。。]
  • Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);——忽略大小写排序
  • Arrays.sort(strArray, Collections.reverseOrder());——反向排序
  • Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);——忽略大小写反向排序
  • sort(T[] a, Comparator<? super T> c)——根据指定比较器产生的顺序对指定对象数组进行排序。(同上面接口配合使用)

# 六. Thread类

返回顶部

  • public String getName()——获取当前线程名称
  • public final int getPriority()——返回线程优先级
  • public final void setPriority(int newPriority)——改变线程的优先级,最高10级,最低1级,默认5级
  • public static void sleep(long millis)——使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),期间会一直持有锁对象
  • public static void yield():——只是让当前线程暂停一下,随后继续和其他线程竞争
  • public static Thread currentThread()——返回对当前正在执行的线程对象的引用。
  • Thread.State getState()——返回该线程的状态。
  • void interrupt()——中断线程。
  • public final boolean isAlive():——测试线程是否处于活动状态。如果线程已经启动且尚未终止,则为活动状态。
  • void join() :——等待该线程终止
  • boolean isInterrupted()——测试线程是否已经中断
  • void join(long millis):——等待该线程终止的时间最长为 millis 毫秒
  • setDaemon(true)——方法可将指定线程设置为守护线程。必须在线程启动之前设置
  • isDaemon()——可以判断线程是否是守护线程
  • static boolean holdsLock(Object obj)——当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true

# 七. Java.lang.System类

返回顶部

# Java.lang.System类全部为静态方法

  • static long currentTimeMillis()——返回当前系统时间距离1970-1-1 0:0:0的毫秒值
  • static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)(srcPos - 源数组中的起始位置。destPos - 目标数据中的起始位置,length-要复制的数组元素的数量)从指定源数组中复制一个数组,复制到指定的数组。常用于数组的插入和删除,可以是同一数组
  • static void exit(int status) :——退出当前系统,参数0表示正常退出,非零整数异常退出
  • static String getProperty(String key):——获取某个系统属性值,System.getProperties()配合使用,获取系统属性
  • static void gc() :——运行垃圾回收器

# java.lang.Runtime

类它的对象代表当前程序运行的JVM环境。

  • public long totalMemory():——总内存
  • public long freeMemory():——空闲内存
  • public static Runtime getRuntime()——返回与当前 Java 应用程序相关的运行时对象。
  • gc();

# 八. Math

返回顶部

全部为静态方法
用于数学运算,其所有方法均为静态方法,并且不会创建对象

  • public static double abs(double a)——返回 double 值的绝对值
  • public static double ceil(double a)——返回大于等于参数的最小的整数
  • public static double floor(double a)——返回小于等于参数最大的整数
  • public static long round(double a)——返回最接近参数的 long。(相当于四舍五入方法)
  • public static double pow(double a,double b):——返回a的b幂次方
  • public static double sqrt(double a):——返回a的平方根
  • public static double random():——返回[0,1)的随机值
  • public static final double PI:——返回圆周率
  • public static double max(double x, double y):——返回x,y中的最大值
  • public static double min(double x, double y):——返回x,y中的最小值

# 九. BigInteger

返回顶部

java.math包,不可变的任意精度的整数。

  • BigInteger(String val)
  • BigInteger add(BigInteger val) ——【加】
  • BigInteger subtract(BigInteger val) ——【减】
  • BigInteger multiply(BigInteger val) ——【乘】
  • BigInteger divide(BigInteger val) ——【除】
  • BigInteger remainder(BigInteger val) ——【余】

# BigDecimal

返回顶部

不可变的、任意精度的有符号十进制小数。
不可直接用运算符计算,要new对象来表示数据,要通过add,subtract,multiply,divide等方法来进行算术运算,参见API,其中除法运算需要指定类型和精度

# 十. RoundingMode枚举类

返回顶部

  • CEILING :向正无限大方向舍入的舍入模式。
  • DOWN :向零方向舍入的舍入模式。
  • FLOOR:向负无限大方向舍入的舍入模式。
  • HALF_DOWN :向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。
  • HALF_EVEN:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
  • HALF_UP:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。
  • UNNECESSARY:用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。
  • UP:远离零方向舍入的舍入模式。

# 十一. Random

返回顶部

非静态方法,需对象调用
java.util.Random,用于产生随机数

  • boolean nextBoolean():——返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。
  • void nextBytes(byte[] bytes):——生成随机字节并将其置于用户提供的 byte 数组中。
  • double nextDouble():——返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 double 值。
  • float nextFloat():——返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 float 值。
  • double nextGaussian():——返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差是 1.0。
  • int nextInt():——返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
  • int nextInt(int n):——返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
  • long nextLong():——返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。

# 十二. 日期时间

返回顶部

java.util.Date

  • new Date():——当前系统时间
  • long getTime():——返回该日期时间对象距离1970-1-1 0.0.0 0毫秒之间的毫秒值
  • new Date(long 毫秒):——把该毫秒值换算成日期时间对象
  • java.util.Calendar

它是抽象类,无法直接创建对象,直接创建子类对象:GregorianCalendar
通过指定时区和语言环境来创建对象,Calendar.getInstance(时区,语言环境),如果没有指定,就根据操作系统默认的时区和语言环境

  • int get(int field):返回给定日历字段的值
  • java.util.TimeZone:时区
  • java.util.Locale:语言环境
  • java.text.DateFormat

抽象类,无法直接创建对象,直接创建它子类的对象:SimpleDateFormat,只支持对Date类型 对象进行格式化

  • public StringBuffer format(Date date,StringBuffer toAppendTo,FieldPosition pos)——把日期转为字符串:format(日期)

将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer。

  • public Date parse(String text,ParsePosition pos)——把字符串转为日期
  • SimpleDateFormat用于日期时间的格式化。

# 十三. java.time包 JDK1.8新增

返回顶部

  • java.time – 包含值对象的基础包
  • java.time.chrono – 提供对不同的日历系统的访问。
  • java.time.format – 格式化和解析时间和日期
  • java.time.temporal – 包括底层框架和扩展特性
  • java.time.zone – 包含时区支持的类

本地日期时间:LocalDate、LocalTime、LocalDateTime

  • static LocalDate now()——从默认时区的系统时钟获取当前日期
  • static LocalDate of(int year, int month, int dayOfMonth)——从一年,一个月和一天获得一个 LocalDate的实例
  • int getMonthValue()——将月份字段从1到12返回
  • Month getMonth()——使用 Month枚举获取月份字段
  • LocalDate withYear(int year)——返回此日期的副本,并修改年份,同下面2个需重新接收
  • LocalDate plusYears(long yearsToAdd)——返回这个 LocalDate的副本,其中指定的时间段以添加的年数表示
  • LocalDate minusYears(long yearsToSubtract)——返回此 LocalDate的副本,以减去的年份为单位
  • boolean isLeapYear()——根据ISO培训日历系统规则,检查年份是否是闰年
  • static LocalDate parse(CharSequence text)——从一个文本字符串(如 2007-12-03获取一个 LocalDate的实例
  • boolean isAfter(ChronoLocalDate other)——检查此日期是否在指定日期之后
  • boolean isBefore(ChronoLocalDate other)——检查此日期是否在指定日期之前
  • boolean isEqual(ChronoLocalDate other)——检查此日期是否等于指定的日期
  • boolean equals(Object obj)——检查这个日期是否等于另一个日期
  • int compareTo(ChronoLocalDate other)——将此日期与另一个日期进行比较
  • Temporal adjustInto(Temporal temporal)——调整指定的时间对象与此对象的日期相同
  • 指定时区日期时间:ZonedDateTime

持续日期/时间:Period:用于计算两个“日期”间隔 、和Duration:用于计算两个持续时间

  • static Duration between(Temporal startInclusive, Temporal endExclusive)——获取一个 Duration表示两个时间对象之间的持续时间
  • static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive)——获得一个 Period ,由两个日期之间的年数,月份和日期组
  • DateTimeFormatter:日期时间格式化,其用法格式与上图SimpleDateFormat标准相同

# 十四. 异常

返回顶部

  • e.toString():——获得异常种类和错误信息
  • e.getMessage():——获得错误信息
  • printStackTrace():——打印异常的跟踪栈信息并输出到控制台。