本章节收集的类/接口API有:
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值】
常规协定:
(1)如果一个对象的参与计算hashCode值的成员变量没有修改,那么在程序运行期间,每次获取的hashCode值不变。
(2)如果两个对象hashCode不同,那么这两个一定不“相等”
(3)如果两个的hashCode值相同,那么这两个对象不一定“相等”
(4)如果两个相等,那么他们的hashCode值一定要相同。
public boolean equals(Object obj): 【用于判断当前对象与指定对象是否相等】
默认的实现,等价于“==”,比较对象的内存地址。
子类可以选择重写,重写有一些要求及原则:重写equals时,一定要重写hashCode方法。一致性、对称性、自反性、传递性、非空对象与null的equals一定是false
protected Object clone()throws CloneNotSupportedException : 【获取一个对象的克隆体对象】
所有类型都可以重写这个方法,它是获取一个对象的克隆体对象用的,就是造一个和当前对象各种属性值一模一样的对象。当然地址肯定不同。
调用此方法必须实现java.lang.Cloneable接口。
枚举
1.toString(): 【默认返回的是常量名(对象名),可以继续手动重写该方法】
2.name(): 【返回的是常量名(对象名)】
3.ordinal(): 【返回常量的次序号,默认从0开始】
4.values(): 【返回该枚举类的所有的常量对象,返回类型是当前枚举的数组类型,是一个静态方法】
5.valueOf(String name): 【根据枚举常量对象名称获取枚举对象】
包装类
大部分方法为静态方法,可用类名调用
1、基本数据类型和字符串之间的转换
1)String str = String.valueOf(xxx); 【把基本数据类型转为字符串】
2)除了Character类之外,其他所有包装类都具有parseXxx静态方法
int a = Integer.parseInt("整数的字符串"); 【String转换成对应的基本类型 】
3)把字符串转为包装类,然后可以自动拆箱为基本数据类型,(返回值类型是包装类)
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) 【整数转八进制】compareTo(String)和compareToIgnoreCase(String)方法 【对两个字符串进行比较】
接口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类
全部为静态方法
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环境。
(1)public long totalMemory(): 【总内存】
(2)public long freeMemory(): 【空闲内存】
(3)public static Runtime getRuntime() 【返回与当前 Java 应用程序相关的运行时对象。】
(4)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
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()
: 【打印异常的跟踪栈信息并输出到控制台。】常见异常列表