# 源码中的工具类与函数
类
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():——打印异常的跟踪栈信息并输出到控制台。