Java《前世今生》03 之精华常用工具类
大家好,我是【互联网小龚】,某上市公司软件开发工程师,点击右上方“关注”,每天分享【个人成长】、【程序员知识干货】、【互联圈热点】。承接志同道合朋友,一起分享知识,探讨技术。
一、Java工具类概述
Java工具类包含:
包装类
数学相关
日期相关
字符串相关
集合相关
异常相关
I/O相关
线程相关
网络相关
反射注解
GUI相关
二、包装类(封装类)
byte---Byte
short---Short
int---Integer
long---Long
float---Float
double---Double
char---Character
boolean---Boolean
8个包装类都同在一个包下 java.lang包 不需要import导包直接使用
8个包装类中有6个是与数字相关的,都默认继承父类Number
8个包装类都实现了Serializable,Comparable
8个包装类都带有自己对应类型参数的构造方法
8个包装类中有7个(除了Character)还有构造方法重载 带String类型
创建对象,对象调用方法
有6个与数字相关的类都继承Number
? xxxValue();//将一个包装类类型转化为对应的基本类型(拆包)
? XXX.parseXXX();//将一个字符串类型转化为基本类型
注:==与equals()的区别
1、==可以比较基本数据类型,也可以比较引用数据类型(变量中存储的内容)
如果比较基本类型比较的是变量中存储的值
如果比较引用类型比较的是变量中存储的地址引用
2、equals()是object类中继承过来的方法,每一个引用类型都可以调用
默认继承的equals()方法比较与==一致,可以改变规则重写方法
由于Integer类就重写了equals()所以Integer比较的是数值
3、考察Integer类加载的时候,自己有一个静态的空间
空间内立即加载Integer类型的数组,内存储256个Integer对象 -128---127
如果我们用的对象范围在这之内Integer i1=10;直接取静态区中找对应的对象
如果我们用的对象范围不在这之内Integer i1=1000;会帮我们创建一个新的Integer对象
三、数学相关的类
1.Math类
所属的包java.lang
Math构造方法是私有的,我们不能直接调用创建对象
由于Math中提供的属性及方法都是static,不需要创建对象
常用的方法
abs()返回给定数字的绝对值(参数int long float double)
返回double类型 ceil()方法:向上取整
回double类型 floor()方法:向下取整
返回double类型 rint()方法:临近的整数,如果两边距离一样,则返回偶数
返回int类型 round()方法:四舍五入的整数
max(a,b) min(a,b) (参数int long float double)
pow(a,b) a的b次方 (参数double 返回值double)
sqrt(double a)获取给定参数的平方根
返回double类型 random()方法:随机产生一个[0.0---1.0)之间的数字
2.Random类
在java.util包中的类,需要import导入包
没有任何继承关系,默认继承object类
查找构造方法—>如何创建对象
Random r = new Random();
类中提供的常用方法
r.nextInt();随机产生int范围的整数,有正数有负数
r.nextInt(int bound);随机产生一个[0--bound)之间的整数
bound必须为正数,否则出现异常:IllegalArgumentException
r.nextFloat();随机产生一个[0.0--1.0)
3.UUID类
所属的包 java.util 需要import导包
没有任何继承关系,默认继承object类
构造方法有,但没有无参数的,我们通常不会创建对象
UUID uuid = UUID.randomUUID();
System.out.println(uuid.toString());//数据库表格主键
产生一个32位的随机元素,每一个位置是一个16进制的数字
四、Scanner类
所属包java.util包,需要import导包
通过一个带输入流的构造方法创建对象
常用方法:nextInt() nextFloat() next() nextLine()
五、System类
所属包java.lang包,不需要导入
不需要创建对象,同类名就可以访问
有三个属性和方法
三个属性out in err
方法:gc(); exit(); cunrrentTimeMillis();
六、日期相关类
1.Date类
所属包java.util包,需要import导包
构建对象
通常使用无参数的构造方法,或者带long参数构造方法
Date类中常用的方法
before(); after();
setTime(); getTime();返回long类型
compareTo(); 返回-1,1,0
可以处理一个Date日期的格式
2.DateFormat类
所属java.text包,需要导包使用
此类是一个抽象类,不能创建对象,子类来使用
SimpleDateFormat类是DateFormat的子类
调用带String参数的构造方法创建format对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String v = sdf.format(date1);//通过sdf对象将date1格式化成你想描述的样子
3.Calendar类 代表日历
所属java.util包 需要导包
有构造方法,用protected修饰的,通常访问不到,通常会调用默认的getInstance();
常用的方法
before(); after();
setTime(); getTime();返回Date类型
getTimeInMills(); 返回time
getTimeZone();返回TimeZone
Calendar里面包含一个date属性,可以操作date的某一个局部信息
set get
calendar.set(Calendar.YEAR,2015);
int year = calendar.get(Calendar.YEAR);
4.TimeZone类
所属java.util包
可以通过calendar对象.getTimeZone()获取,或者TimeZone.getDefault();
常用方法
tz.getID()---->地区ID
tz.getDisplayName()---->中国标准时间
七、字符串相关(重中之重)
1.String类
所属包是java.lang包,不用导入
找寻构造方法创建对象
String str = "abc";//直接将字符串常量赋值给str(字符串常量池)
String str = new String("abc");//带string参数的构造方法创建对象
String str = new String();//无参的构造方法创建的对象
String str = new String(byte[]);//将数组中的每一个元素转化为对应的char组合成String
String str = new String(char[]);//将数组中的每一个char元素拼接成最终的String
String是一个非常特殊的引用数据类型,可以像基本类型一样创建,赋值
String类的特性
String的不可变特性,String类中包含一个private final char[] value;
a)长度不可变-->final修饰的数组,数组长度本身不变,final修饰数组的地址也不变
b)内容不可变-->private修饰的属性,不能再类的外部访问
String类中常用的方法
返回类型
boolean = equals(Object obj);//继承自object,重写了,比较两个字符串的字面值是否相等
int = hashCode();//继承自object,重写了,将当前字符串的每一个char元素拆开乘以31求和
int = compareTo(String str);//实现了Comparable接口,实现了,按照字典(Unicode编码)索引的顺序比较
String = toString();//继承自object,重写了,不在输出类名@hashCode,而是字符串的字面值
char = charAt(int index);//返回给定index对应位置的那个char值
int = codePointAt(int index);//返回给定index对应位置的那个char所对应的code码
int = length();//返回字符串的长度
String concat(String);//将给定的字符串拼接在当前字符串之后
boolean = contains(CharSequence s);//判断给定的s是否在字符串中存在
boolean = startsWith(String prefix);
boolean = endsWith(String suffix);//判断此字符串是否以xx开头/结尾
byte[] = getBytes(); //有重载--->getBytes(String charsetName);
char[] = toCharArray();//将当前的字符串转化为数组,例如:“中国” '中' '国'
int = indexOf(int/string str,int fromIndex);//四个方法重载,找给定的元素在字符串中第一次出现的索引位置,若字符串不存在则返回-1
int = lastIndexOf(int/string str,int fromIndex);//四个方法重载,找寻给定的元素在字符串中最后一次出现的索引位置,若不存在则返回-1
boolean isEmpty();//判断当前字符串是否为空字符串(length是否为0)注意:与null之间的区别
String = replace();
String = replaceAll();
String = replaceFirst();//换第一次出现的那个字符串,将给定的字符串替换成另外的字符
String = substring(int beginIndex);//从beginIndex开始到结尾
String = substring(int beginIndex,int endIndex);//从beginIndex开始到endIndex结尾,将当前的字符串截取一部分
String = toUpperCase();
String = toLowerCase();//将全部字符串转换为大写/小写
String[] = split(String regex);
String[] = split(String regex,int limit);//有一个界限拆开,按照给定的表达式将原来的字符串拆分开来
String = trim();//去掉字符串前后多余的空格
boolean = matches(String regex);//正则表达式
2.StringBuffer/StringBuilder
所属的包 java.lang包
默认继承object 实现接口Serializable,CharSequence,Appendable
StringBuffer/StringBuilder没有compareTo方法
StringBuffer/StringBuilder含有一个String没有的方法 append();拼接
特性
可变字符串 char[] value;动态扩容
对象的构建
无参数构造方法 (默认空间16个)
有参数构造方法
StringBuilder中常用的方法
append();//频繁的拼接字符串的时候使用此方法,提高性能
capacity();//字符串底层char[]的容量
length();//字符串有效元素个数(长度)
setLength();//设置字符串元素的有效个数
char = charAt(int index);
int = codePointAt(int index);
String = substring(int start,int end);//注意需要返回值,看见截取出来的新字符串效果
StringBuilder = delete(int start,int end);//StringBuilder类中独有的方法String类没有,将start到end之间的字符串删掉,不用接受返回值既可
StringBuilder = deleteCharAt(int index);//String类中没有的方法,将给定index位置的某一个字符删除掉
int = indexOf(String str,int fromIndex);
int = lastIndexOf(String str,int fromIndex);//找寻给定的str在字符串中第一次出现的索引位置
insert(int index,value);//给定的value插入在index位置上
replace(int start,int end,String str);//将start和end之间的部分替换成str;
builder.replace(2,5,"aaa");
setCharAt(int index,char ch);//将index位置的字符改成给定的value
trimToSize();//将数组中无用的容量去掉,变成length长度的数组
reverse();//字符串反转
总结:
1、StringBuilder类不一定需要,是为了避免String频繁拼接修改字符串信息的时候才用
底层数组是可变的,提高了性能
2、常用方法
与String类不同方法
append() insert() delete() deleteCharAt() reverse()
与String类相同方法
length() charAt() codePointAt() indexOf() lastLindexOf() substring() replace() 名字相同用法不一致
3、StringBufrer和StringBuilder区别
StringBufrer 早起版本1.0
StringBuilder 后来版本1.5
StringBufrer 线程同步 安全性比较高 执行效率相对比较低
StringBuilder 线程非同步 安全性比较低 执行效率相对比较高
八、枚举类
一个类中的对象,认为个数是有限且固定的,可以将每一个对象一一列举出来
假如没有枚举类,手动设计(静态常量 单例模式) Day(类 当做描述星期 7个对象)
private构造方法
public static final属性 = new
JDK1.5版本之后可以直接定义enum类型
我们自己定义的enum类型直接默认继承Enum(java.lang包)
我们自己定义的enum类型不能再写extends但是可以实现接口
Enum类型
有两个属性
name---->枚举对象的名字 name()获取name属性
ordinal-->枚举对象在类中罗列的顺序,类似index索引,也从0开始,ordinal() 获取序列号
一些常用的方法
valueOf() 通过给定的name获取对应的枚举对象
values() 获取全部的枚举对象,返回一个数组 Day[]
compareTo() 可以比较两个枚举对象 int
toString() 由于这个方法没有final修饰,可以重写
九、正则表达式regex
正则表达式regex
一个带有一定规律的表达式
匹配字符串格式的
正则表达式通常的作用:
1、字符串的格式校验 String类中提供的一个方法 boolean = matches("regex");
2、字符串的拆分及替换 String类中提供的方法 replace split
3、字符串的查找 Pattern模式 Matcher匹配器