java工具——常用类库
工欲善其事必先利其器
要做好一名工程师,首先要对各种常用的先进的工具有一个灵活的掌握和应用。
本次总结的这些类库也许不太全面,我会在后续学习的过程中进行补充。
概述
泛型,即参数化类型。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
使用
泛型类
public class ClassName<T> {
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
泛型接口
public interface IntercaceName<T> {
T getData();
}
实现接口时,可以选择指定类型,也可以选择不指定
指定类型
public class Interface1 implements IntercaceName<String> {
private String text;
泛型方法
private static <T> T 方法名(T a, T b) {}
泛型限制类型
在使用泛型时,可以指定泛型的限定区域
(必须时某某类的子类或某某接口的实现类)
<T extends 类或接口1 & 接口>
反省中的通配符
类型通配符是使用 “ ?” 代替具体的类型实参
java.util.Objects——对象判断类
范围界限检查(按照大小界限查找): Objects.checkFromIndexSize(int fromIndex, int size, int length)
范围界限检查(按照索引界限查找): Objects.checkFromToIndex(int fromIndex, int toIndex, int length)
索引范围界限检查: Objects.checkIndex(int index, int length)
验证两个对象是否是同一对象: Objects.compare(T a, T b, Comparator<? <T> int super T> c)
验证内存地址是否相等:Objects.equals(Object a, Object b)
生成哈希码: Objects.hash(Object... values)
参数非空时返回哈希码: Objects.hashCode(Object o)
判断参数引用是否为空: Objects.isNull(Object obj)
判断参数引用是否为非空: Objects.nonNull(Object obj)
检查不指定特定类型的对象引用是否非空: Objects.requireNonNull(T obj)
检查不指定特定类型的对象引用是否为空,如果是,抛出自定义空指针异常报告: Objects.requireNonNull(T obj, String message)
检查不指定特定类型的对象引用是否为空,如果是,抛出自定义空指针异常报告(不指定报告类型): Objects.requireNonNull(T obj, Supplier<String> messageSupplier)
检查对象的参数引用是否非空,如果是返回第一个参数,否则返回第二个非空参数: Objects.requireNonNullElse(T obj, T defaultObj)
检查对象的参数引用是否非空,如果是返回第一个参数,否则返回第二个非空参数(不指定类型): Objects.requireNonNullElseGet(T obj, Supplier<? extends T> supplier)
以字符串的方式返回基本数据类型对象的内容: Objects.toString(Object o)
以字符串的方式返回基本数据类型对象的内容,第一个非空返回第一个的,否则返回会第二个的: Objects.toString(Object o, String nullDefault)
java.lang.Math——算术操作类
字段
自然对数的基数: E
圆周率: PI
方法
返回double类型的绝对值: Math.abs(double a )
返回float类型的绝对值: Math.abs(float a )
返回int类型的绝对值: Math.abs(int a )
返回long类型的绝对值: Math.abs(long a )
返回角度的反余弦值(0 - pi): Math.acos(double a)
返回角度的反余弦值(0 - pi): Math.acos(double a)
返回角度的反余弦值(0 - pi): Math.acos(double a)
常用
四舍五入: Math.round(int)
小于等于参数的最大整数: Math.floor(int)
大于等于参数的最大整数: Math.ceil(int)
java.util.Arrays——数组操作类
打印数组成员: Arrays.toString(arr)
对数组排序: Arrays.sort(arr) Arrays.parallelSort(arr)
二分查找: Arrays.binarySearch(arr, int key)
扩容: Arrays.copyOf(arr, int newlength)
java.math.BigDecimal——精确运算
用来对超过16位有效位的数进行精确的运算。
构造器
BigDecimal(int) 创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。
BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。
常用方法
加法: BigDecimal.add(BigDecimal augend)
减法: BigDecimal.subtract(BigDecimal augend)
乘法: BigDecimal.moltiply(BigDecimal augend)
除法: BigDecimal.divide(BigDecimal augend)
java.util.Date——日期时间类
Java的java.util.Date类是Java最初的时间类之一。今天该类的大部分方法已不推荐使用,取而代之的是java.util.Calendar类。
目前可用且常用的方法有
getTime() 获取当前时间的毫秒数
serTime() 设置当前时间并格式化
Date 类表示特定的时刻,精度为毫秒。
java.text.DateFormat——格式化时间
将date对象,转换为字符串
SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd H:M S"); System.out.println(format.format(new Date()));
将日期字符串,转换为date对象(获取时间戳)
System.out.println((new Date().getTime()-format.parse("2021-09-21 12:30 54").getTime())/1000/60/60/24);
java.util.Calendar——日历类
作为一个取代Date类的工具,其必然具有更多的过人之处。
本次就此讨论他的使用和方法
实例化——Calendar类是一个抽象类,是不能实例化的
这个类得到一个日历实例的方法两种
1. Calendar calendar = Calendar.getInstance(TimeZone zone , Locale locale); 2. Calendar calendar = new GregorianCalendar();
第一种方法——通过调用getInstance方法,加上参数Timezone或Locale选择地域地点
第二种方法——用子类来实例化
类变量——Calendar中变量基本都用final限定
calendar.get(Calendar.YEAR); //年份 calendar.get(Calendar.MONTH); //月份从0开始 calendar.get(Calendar.DAY_OF_MONTH); //一天于月 calendar.get(Calendar.DAY_OF_WEEK); //一天于周 calendar.get(Calendar.WEEK_OF_YEAR); //一周于年 calendar.get(Calendar.WEEK_OF_MONTH); //一周于月 calendar.get(Calendar.HOUR); // 12小时 calendar.get(Calendar.HOUR_OF_DAY); // 24小时 calendar.get(Calendar.MINUTE); //分钟 calendar.get(Calendar.SECOND); //秒 calendar.get(Calendar.MILLISECOND); //毫秒
常用方法
compareTo(Calendar othercalendar) //判断对象日期在参数日期之前还是之后 after(Calendar othercalendar) //判断对象日期是否在参数日期之之后 before(Calendar othercalendar) //判断对象日期是否在参数日期之之前
get(int field) //可以获得年月日时分秒,还能得到当前年有多少天,当前月有多少天等等
set( ) //可以进行年月日时分秒的设置
setTime( ) //可以将一个Date类型的时间进行赋值
setTimeInMillis() //可以将一个long类型的时间赋值
getTimeInMillos() //可以获取long类型的时间
java.lang.System
字段
public final static InputStream //in “标准”输入流 public final static PrintStream //out “标准”输出流 public final static PrintStream //err “标准”错误输出流
常用方法
currentTimeMillis() 以毫秒为单位返回当前时间 nanoTime() 返回正在运行的Java虚拟机的高分辨率时间源的当前值,以纳秒为单位 arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 将指定源数组中的数组从指定位置开始复制到目标数组的指定位置 lineSeparator() 返回依赖于系统的行分隔符字符串 Properties getProperties() 确定当前系统属性
String 字符串类
String 不可变
常用方法
-
int length(); 获取字符串长度
-
char charAt(i); 从字符串中去除指定位置的字符
-
char toCharArray(); 将字符串转换成一个字符数组
-
int indexOf("字符"); 查找一个指定的字符在某字符串中是否存在,存在则返回字符的索引位置,否则返回-1
-
int lastIndexOf("字符"); 得到指定内容最后一次出现的下标
-
toUpperCase(); 小写转换为大写
-
toLowerCase(); 大写转换为小写
-
split("字符"); 根据指定的分割符差分字符串,返回字符的数组
-
boolean equals(Object anObject) 比较两个字符串是否相等(比a.equals(b) 方法容错率高)
-
trim(); 去掉字符串左右空格
-
replace(char oldChar, char newChar); 替换对应字符
-
replaceAll(String, String); 将某个字符串内容全部替换成指定的内容
-
replaceFirst(String, String ); 将第一次出现的某个内容替换曾指定的内容
-
substring(int beginIndex, int endIndex); 按照索引范围截取字符串
-
boolean equalsIgnoreCase(String); 忽略大小写比较两个字符串是否一样。
-
boolean contains(String); 判断一段字符串是否包含另一端字符串
-
boolean startsWith(String); 测试此字符串是否以指定的前缀开始。
-
boolean endsWith(String); 测试此字符串是否以指定的后缀结束。
StringBuilder 和 StringBuffer 与 String
一、 运算速度比较(通常情况下): StringBuilder > StringBuffer > String
String 时 final 类不能被继承且为字符串变量,而StringBuilder 和 StringBuffer 均为字符串变量。
-
String对象一旦创建不能更改,而 StringBuilder 和 StringBuffer 是可变的
-
StringBuilder 和 StringBuffer 只能通过构造函数来创建对象
-
对象被创建后将在内存中分配内存空间,并初始保存一个null,通过append 方法向 StringBuffer 和 StringBuilder 中赋值
二、 线程安全性
StringBuilder ( 非线程安全)
因为不能保证同步,因此在性能上要比StringBuffer更高
StringBuffer (线程安全)
StringBuffer 中大部分方法由 synchronized(线程同步锁) 关键字修饰,在必要时可对方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生。
三、 总结
String:适用于少量的字符串操作。
StringBuilder:适用于单线程下在字符串缓冲区进行大量操作。
浙公网安备 33010602011771号