1、Objects类:
包含了static实用程序方法,这些实用程序包括了null或null方法。用于计算对象的哈希代码,返回对象的字符串,比较两个对象以及检查索引或子范围值是否超出范围。
方法摘要:
难点:变量和类型为:static int
方法:compare(T a, T b, Comparator<? super T> c)
描述:如果参数相同,则则返回0,否则返回c.compare(a,b)。
检查范围的简单来说就是判断是否下标越界三个方法:变量和类型都是stati int
1、checkFromIndexSize(int fromIndex, int size, int length) 描述 :检查是否在子范围从第一个参数(包括)到(第一个参数+size(第二个参数))(不包括)
2、checkFromToIndex(int fromIndex, int toIndex, int length) 描述:检查是否在子范围从第一个参数(包括)到(第二个参数)(不包括)
3、checkIndex(int index, int length) 描述:检查第一个参数是否在0(包括)-length(不包括)范围内。
equals(Object a, Object b) 和 deepEquals(Object a, Object b)的区别: (变量和类型:static boolean)
当我们比较两个内容相等的时候适用deepEquals。(若为对象数组且未重写equals方法,不建议使用。)equals的相等需要两个内容的物理地址相等才相等。如果对象重写了equals不在此情况内。
isNull(Object obj) 和 nonNull(Object obj) (变量和类型:static boolean)区别:
isNull 如果为null 则true nonNull恰好相反
检查指定对象是否为空的四种方法:(变量和类型均为泛型 static T)
requireNonNull(T obj) 检查obj是否不是null,不是null则返回true。从方法名可以看出来意思。
requireNonNull(T obj, String message)
requireNonNull(T obj, Supplier messageSupplier) 第二个和第三个方法作用相同。检查obj是否不是null,是null则抛出空指针异常。
requireNonNullElse(T obj, T defaultObj) 如果不是null则返回第一个参数,是null则返回非null的第二个参数
requireNonNullElseGet(T obj, Supplier<? extends T> supplier) 如果不是null则返回第一个参数,是null则返回非null值supplier.get()。
hash(Object… values) 变量和类型:static int;为一系列输入值生成哈希码。
hashCode(Object o) 变量和类型:static int;返回非的哈希码 null参数,0为 null的论点。
toString(Object o) 与 toString(Object o,String nullDefault)区别:(变量和类型都是static String)
如果o不会空则调用toString,第二个方法如果为空则调用第二个参数即可。
2、Math类 (常用的总结)
当我们需要进行算术运算时,首先想到的是使用Math类的工具。如果Math类没有我们需要的方法,我们再进行自定义方法。
① 方法 类型名 abs(类型名 a) 都是返回 a 相应类型的绝对值。
② 方法 int/long addExact(int/long a,int/long b) 返回a 与 b的和相应返回类型
eg:使用int类型:
public class MathTest {
public static void main(String[] args) {
int a = -3;
int b = 5;
int c = Math.addExact(a,b);
System.out.println(c);
}
}
运行结果:2
方法 int/long decrementExact(int/long a) 返回参数递减1,如果结果溢出 int则抛出异常。 简单来说就是实现递减1。
方法 incrementExact(int/long a) 返回参数递加1,如果结果溢出 int则抛出异常。
③ 三角函数有关的方法,具体查询API 。具有返回值:acos、asin、atan、atan2、cos、cosh、sin、sinh、tan、tanh
④ 方法 double ceil(double a),返回一个大于或者等于a的数学整数最小值。
方法 double floor (double a),返回一个小于或者等于a的数学整数最大值。
eg:
public class MathTest {
public static void main(String[] args) {
double a = 5.93d;
double b = -5.93d;
double c = Math.ceil(a);
System.out.println(c);
c = Math.ceil(b);
System.out.println(c);
}
}
运行结果:6.0
-5.0
⑤ double/float copySign(double/float magnitude, double/float sign) 返回带有第二个浮点参数符号的第一个浮点参数
eg:
public static void main(String[] args) {
double a = -5.9321;
double b = 5.2182;
double c = Math.copySign(a,b);
System.out.println(c);
}
运行结果:5.9321
⑥ 关于数学e值的方法:double exp(double a) 返回Euler的数字 e ,其值 double值。
double expm1(double x) 返回返回 e x(e的x次方) -1。
double log(double a) 返回 double值的自然对数(基数 e )。double log10(double a) 返回 double值的基数10对数。double log1p(double x) 返回参数和的总和的自然对数。
⑦ 方法 max、min。两个参数。两个参数类型相同,返回两个参数的最大或最小值。
⑧ 方法 类型名 multiplyExact(类型名 x, 类型名 y) 。int、long型。返回两个参数的乘积的值
⑨ 方法 类型名 negateExact(类型名 x) 。int/long型。返回x的相反数。简单来说就是取反
⑩ 方法 double random()。产生一个0(包括)-1(不包括)之间的随机数
①① 方法 double rint(double a) 返回与 double值最接近的 double值,该值等于数学整数。 当a为8.5或者-8.5时,返回的值为8.0 。其实除开这个相当于四舍五入。
①② 方法 long round(double a) 返回与参数最接近的 long ,并将关系四舍五入为正无穷大。 int round(float a) 返回与参数最接近的 int ,并将关系四舍五入为正无穷大。 注意:两个函数的返回值是long、int。
①③ 方法 double sqrt(double a) 返回 double值的正平方根。
①④ 方法 int/long subtractExact(int/long a,int/long b) 返回相对应的值 ,简单来说就是求a-b。
3、Arrays类(常用的方法)
① binarySearch(类型名[] arr,类型名 a) 二分查找,查找a在数组arr的位置下标。返回的是一个int型数组下标。当a查询不到时,返回一个小于0的值。
eg:
public static void main(String[] args) {
int[] arr = {1,4,7,32,67,100};
int index = Arrays.binarySearch(arr,7);
System.out.println(index);
}
运行结果:2
② 方法copyOf
重新创建一个数组,将原数组复制到新数组并且做到了扩容。
public static void main(String[] args) {
int[] arr1 = {1,4,7,32,67,100};
int[] arr;
arr = Arrays.copyOf(arr1,10);
System.out.println(Arrays.toString(arr));
}
结果:[1, 4, 7, 32, 67, 100, 0, 0, 0, 0]
③ 方法copyOfRange
将指定数组的范围复制到新数组中,下面举一个例子
public static void main(String[] args) {
int[] arr1 = {1,4,7,32,67,100};
int[] arr2 = {2,32,4};
int[] arr;
arr2 = Arrays.copyOfRange(arr1,2,6);
System.out.println(Arrays.toString(arr2));
}
运行结果:[7, 32, 67, 100] //很明显原来的arr2数组的值被覆盖了
④ 关于String deepToString(Object[] obj)方法的使用:在这个地方我有一个疑惑,就是为什么arr2数组不能使用int类型声明,是因为返回值String限制了吗
public static void main(String[] args) {
//int[] arr1 = {1,4,7,32,67,100};
Object[] arr2 = {"2","32","4"};
//int[] arr;
//arr2 = Arrays.copyOfRange(arr1,2,6);
System.out.println(Arrays.deepToString(arr2));
}
运行结果:[2, 32, 4]
⑤ equals方法 例子如下:类型名可以改变,返回值是boolean类型。true or false
public static void main(String[] args) {
int[] arr1 = {2,2,4};
int[] arr2 = {2,2,4};
//int[] arr;
//arr2 = Arrays.copyOfRange(arr1,2,6);
System.out.println(Arrays.equals(arr1,arr2));
}
运行结果:true
⑥ fill方法 例如 void fill(int[] arr,int value) 的含义就是将value的值赋给arr数组的每一个元素
第一种形式:
public static void main(String[] args) {
int[] arr = new int[3];
Arrays.fill(arr,3);
System.out.println(Arrays.toString(arr));
}
运行结果:[3, 3, 3]
第二种形式:
public static void main(String[] args) {
int[] arr = new int[6];
Arrays.fill(arr,2,5,3); //索引2到5赋值3.包括2不包括5
System.out.println(Arrays.toString(arr));
}
运行结果为:[0, 0, 3, 3, 3, 0]
⑦ hashcode方法 返回类型为int,一个参数例如参数int[] a。
⑧ mismatch方法,返回类型为int,两个数组参数,简单来说是查找两个数组的第一个不匹配的相对索引,如果未找到则返回-1. 有两种方式,同⑥类似。
⑨ sort方法,无返回值,升序。例子 两种形式:Ⅰ:void sort(int[] a); Ⅱ:void sort(int[] a,int fromIndex,int toIndex)
⑩ String toString(int[] a) 返回指定数组内容的字符串表示形式。
4、BigDecimal类(常用的方法)
BigDecimal有自身的构造器,具体构造方法参见API
① abs方法 BigDecimal abs(); 一般适用于整数的取绝对值
public static void main(String[] args) {
BigDecimal B1 = new BigDecimal(-2);
System.out.println(B1.abs());
}
结果:2
② add方法 常用下面的这种形式: (常用于两个整数的求值,当b1,b2不为整数的时候,求和精度有误,当求和加起来为整数时,精度无误。)
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal(-2);
BigDecimal b2 = new BigDecimal(6);
System.out.println(b1.add(b2));
}
结果:4
③ divide方法 求商 返回值为BigDecimal。注意:如果无法表示准确的商(因为它具有非终止的十进制扩展),则抛出ArithmeticException 。
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal(8);
BigDecimal b2 = new BigDecimal(4);
System.out.println(b1.divide(b2));
}
结果:2
④ 除了equals方法其他方法均无参数,返回值即是转换的值。只有int 和 long 转换存在丢失数据信息的可能,则有一个检查的方法在转换原基础上增加了Exact。
double doubleValue() 将 BigDecimal转换为 double 。
boolean equals(Object x) 将此 BigDecimal与指定的 Object进行相等性比较。
float floatValue() 将 BigDecimal转换为 float 。
int hashCode() 返回此 BigDecimal的哈希码。
int intValue() 将 BigDecimal成 int 。
int intValueExact() 将 BigDecimal转换为 int ,检查是否丢失了信息。
long longValue() 将 BigDecimal转换为 long 。
long longValueExact() 将此 BigDecimal转换为 long ,检查是否丢失了信息。
⑤ max,min有一个BigDecimal类型参数,返回值类型BigDecimal。返回最大或最小值。
⑥ valueOf方法,将double或者long转换为BigDecimal类型。
注意:当我们使用构造方法传入的是字符串数字的时候,小数丢失精度问题则没有了
5、Date类,我们只需要关注 Date类表示特定的时刻,精度为毫秒即可。
关注它的构造函数(常用):Date();
① boolean after(Date when) 测试此日期是否在指定日期之后。
boolean before(Date when) 测试此日期是否在指定日期之前。
boolean equals(Object obj) 比较两个相等的日期。
int compareTo(Date anotherDate) 比较两个日期的前后,如果调用的对象在参数对象时间为前则返回小于0的值,两个日期相同则返回0,在后就返回大于0的值。示例如下:
public static void main(String[] args) {
Date date1 = new Date();
Date date2 = new Date(218937243);
System.out.println(date1);
System.out.println(date2);
System.out.println(date2.compareTo(date1));
}
结果:Thu Jul 15 14:02:06 GMT+08:00 2021
Sat Jan 03 20:48:57 GMT+08:00 1970
-1
② long getTime() 和 void setTime(long time) 两个方法。
eg
public static void main(String[] args) {
Date date1 = new Date();
Date date2 = new Date();
long l = 21281473;
date2.setTime(l);
System.out.println(date1);
System.out.println(date2);
System.out.println(date1.getTime());
}
结果:Thu Jul 15 14:10:59 GMT+08:00 2021
Thu Jan 01 13:54:41 GMT+08:00 1970
1626329459358
③ toString方法
public static void main(String[] args) {
Date date1 = new Date();
System.out.println(date1);
System.out.println(date1.getTime());
System.out.println(date1.toString());
}
结果:Thu Jul 15 14:09:47 GMT+08:00 2021
1626329387074
Thu Jul 15 14:09:47 GMT+08:00 2021
可以发现toString返回的和直接返回对象的格式是一样的。
在Date类,咱们只需要知道这个就可以了。其他的方法已过时。
6、DateFormat类(常用的方法)
该类是一个抽象类,进入它的直接子类SimpleDateFormat
SimpleDateFormat 拥有自己的构造方法
-
Date and Time Pattern Result "yyyy.MM.dd G 'at' HH:mm:ss z"
2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy"
Wed, Jul 4, '01
"h:mm a"
12:08 PM
"hh 'o''clock' a, zzzz"
12 o'clock PM, Pacific Daylight Time
"K:mm a, z"
0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa"
02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z"
Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ"
010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"
2001-07-04T12:08:56.235-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
2001-07-04T12:08:56.235-07:00
"YYYY-'W'ww-u"
2001-W27-3
上面表格,转自Java API。
eg:
public static void main(String[] args) {
SimpleDateFormat date1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm ss");
String text = date1.format(new Date());//创建一个匿名对象
System.out.println(text);
}
结果:2021年07月15日 14:44 33
7、Calendar类
部分方法如下
public static void main(String[] args) {
Calendar c1 = Calendar.getInstance();
int year = c1.get(Calendar.YEAR);
int day = c1.get(Calendar.DAY_OF_WEEK); //由于是从周日算为第一天
Date date = c1.getTime();
System.out.println(date);
System.out.println(year);
c1.add(Calendar.YEAR,6); //月份,周,天数,类推
System.out.println(c1.get(Calendar.YEAR));
System.out.println(day);
}
结果:Thu Jul 15 15:27:41 GMT+08:00 2021
2021
2027
5
其他方法:
public static void main(String[] args) {
Calendar c1 = Calendar.getInstance();
//获取日历时间,表示的Date对象 getTime()方法
Date date = c1.getTime();
System.out.println(date);
//查看一个月或者一年最大的天数方法如下
int month = c1.getActualMaximum(Calendar.MONTH);
int dayOfYear = c1.getActualMaximum(Calendar.DAY_OF_YEAR);
System.out.println(month);
System.out.println(dayOfYear);
//set方法
c1.set(Calendar.MONTH,1); //1代表2月 0-11代表1-12月
System.out.println(c1.getActualMaximum(Calendar.DAY_OF_MONTH));
}
结果:Thu Jul 15 15:25:47 GMT+08:00 2021
11
365
28