1.包装类
所有基本类型对应的包装类:
boolean Boolean
byte Byte
char Character
short Short
int Integer
long Long
BigIneger ★
float Float
double Double
BigDecimal ★
string String ★
T t=v;
包装类的对象都是【常量】,只能一次性赋值,或重复赋相同值
若赋不同的值将会创建新对象
意义:
扩展了基本类型的行为
弥补了基本类型不能作为泛型的不足
自动装箱,自动拆箱
1.1类型转换
1、类型转换一(数值)
int a=5;
1.1自动类型转换:小转大(存储空间)
整数转小数:double b=a;
1.2强制转换:大转小
小数转整数:
int c=(int)b;
long d=12888299939223L; #整数默认为int,所以数值超出int范围要L强制
float e=1.23F; #小数默认为double,所以数值降为float要F强制
2、类型转换二(多态)
抽象的引用指向子类的实例(对象:普通类,[匿名]内部类)
Iterable<T> al=new ArrayList();
Collection<T> al=new ArrayList();
Set<T> al=new ArrayList();
ArrayList<T> al=new ArrayList();
2.1自动类型转换:小转大(存储空间)
父(类|接口)引用指向子类的对象
比如:Iterable<T> it=new ArrayList();
2.2强制转换:大转小
将父引用还原成其真实的子类引用
比如:ArrayList<T> al=(ArrayList)it; #通过
再如:LinkedList<T> l1=(LinkedList)it; #异常:ClasscastException
3、将其他类型转化为字符串
String str=String.valueOf(一切基础类型);
4、将字符串转化为其他类型
将字符串转化为包装类对应的基本类型
t v=T.parseT(String value);
将字符串转化为包装类对应的引用类型
T v=T.valueOf(String value);
1.2字符串的常用方法
#【静态方法】
1、将数组arr从offset(默认0)开始(包含)的count(默认arr.length)个字符转化为字符串
String s = String.copyValueOf(char[] arr,int offset,int count);
2、格式化字符串
2、1方法一:
#格式中通配符的数量必须和参数2的元素数量一致
# %s 字符串
# %d 整数
# %[.n]f 小数(n表示小数精度)
String format=String.format(String format,Object...args)
2、2方法二:
#格式中占位符中的数值和参数2中元素数量一致:args.length==5,那占位符区间0~4
String format=MessageFormat.format(String format,Object...args);
2、3字符串拼接
StringBuilder [非多线程并发环境首选]
StringBuffer [多线程环境首选]
StringBuilder builder=new StringBuilder();
#T若为基础类型或包装类直接放入参数即可,若为自定义类型需要重写toString()方法
builder.append(T t);
...
String str=builder.toString();
3、 将可变参数或可迭代参数的元素用参数1字符串作为分隔符连接成一个长字符串
String join = String.join(String sep, String...element|Iterable<String>);
#【对象方法】
String a="henrt.iii@hwww.com";
int length = a.length(); #提取字符串的长度(字符串中字符的数量)
#提取第一个参数1字符串sub在a中的下标位置
int firstDotIx = a.indexOf(String sub);
#提取从参数2fromInclusiveIx开始第一个sub出现的位置
int sndDotIx = a.indexof(String sub,int fromInclusiveIx);
#提取最后一个参数1字符串sub在a中的下标位置
int lastDotIx = a.1astIndexof(String sub);
#提取从参数2fromInclusiveIx结束最后一个sub出现的位置
int lastsndDotIx = a.lastIndexof(".",a.lastIndexof(". ")-1);
#截取a从fromInclusiveIx开始的所有字符
String sub=a.substring(int fromInclusiveIx);
#截取a从fromInclusiveIx开始至toExclusiveIx结束的所有字符
String sub=a.substring(int fromInclusiveIx,int toExclusiveIx);
#提取指定下标位置的字符
char c=a.charAt(int index);
#将字符串中的所有字符按顺序以字符输出
char[] chars = a.toCharArray();
#大小写转换
a.toUpperCase();#小写转大写
a.toLowerCase();#大写转小写
#去除左右两边的空(\r \n \t '')内容
String trim=a.trim();
#判断开始或结束序列
boolean yes=a.startsWith(String sub);
boolean yes1=a.endsWith(String sub);
#字符串比较
boolean yes=a.equals(String b);#等值
boolean yes=a.equalsIgnoreCase(String b); #等值(忽略大小写)
int cmp=a.compareTo(String b);#大小:<0 a<b; =0 a==b; >0 a>b
int cmp=a.compareToIgnoreCase();#忽略大小写比较
2.日期
java.util.Date
Date date = new Date();#构建默认获取系统当前的日期对象
Date date1 = new Date(1234567891234L);#构建指定时间戳的日期对象
long l = System.currentTimeMillis();#获取系统当前时间戳
java.text.SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String format = sdf.format(new Date());
Date parse = sdf.parse("2021-12-13 08:30:01.003");
java.util.Calendar
Calendar calendar=Calendar.getInstance();
#设置时区
calendar.setTimeZone(TimeZone.getTimeZone(ZoneId.of("Asia/Shanghai")));
#设置日期的值:(以下6种)根据已知条件选择合适的方法
calendar.setTime(new Date());
calendar.setTimeInMillis(1234567891234L);
calendar.set(2000,12,12);
calendar.set(2002,12,12,13,33);
calendar.set(2002,12,12,13,33,22);
calendar.set(Calendar.YEAR,2000);
#提取日期
Date now = calendar.getTime();
long timeInMillis = calendar.getTimeInMillis();
int year= calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int quarter=month/3+1;
month+=1;
int day=calendar.get(Calendar.DATE);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
int millisecond = calendar.get(Calendar.MILLISECOND);
int dsfOffset = calendar.get(Calendar.DST_OFFSET);
int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);#周日-周六 1~7
int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH);#月第几周
int dayOfWeekInMonth = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);#每月1号开始,每7天算一周,提取当前日期属于当月第几周
int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);#年日
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);#年第几周
#比较
boolean before = calendar.before(c2);
boolean after = calendar.after(c2);
int cmp = calendar.compareTo(c2);
#计算
calendar.roll(int field,boolean up);
calendar.roll(int field,int amount);
calendar.add(int field,int amount);
3.枚举
通常用于维护固定数量的【自定义状态值】供系统验证使用
public enum NAME{v1,.. .,VN} #和 switch...case搭档最佳
4.正则
#替换,分割,匹配,分组提取
#正则的语法构成
#内容
常量
^ 开始
$ 结束
[] 一个指定范围内的内容[0-9] [2468]
[^] 一个指定范围外的内容[^0-9] [^2468]
| 2选1 ([0-9]|[a-z])
() 组合
. 表示一个任意符号
\\ 转译符(将语法关键字作为符号常量使用) \\.
\\d [0-9]
\\D [^0-9]
\\w [a-zA-Z0-9_]
\\W [^a-zA-Z0-9_]
\\s [ \t\r\n] 一个空符号
\\S [^ \t\r\n]
#内容的重复
{N} 固定匹配 [0-9]{5}=>表示5个数字
{N,} 最小匹配 [a-z]{3,}=>最少3个小写英文字母
{,N} 最大匹配 [a-z]{,3}=>最多3个大写英文字母
{N,N} 区间匹配 [a-z]{3,5}=>最少3个最多5个小写英文字母
? {0,1} 可有可无
+ {1,} 至少一个
* {0,} 0~+∞
#贪婪模式、懒汉模式
.* 任意个任意符号(尽可能多匹配)
.*? 任意个任意符号(尽可能少匹配)
比如:abc,def,hij,lmn,789 (.*),(.*?)$=>取abc,def,hij,lmn
#【正则1】将字符串a中符合regex正则条件的所有内容替换为replace内容并返回替换后的结果字符串
String s = a.replaceAll(String regex,String replace);★★★
String s = a.replaceFirst(String regex,String replace);★★★
String replace=a.replace(char old,char new);
String replace1=a.replace(String old,String new);
#【正则2】以字符串a中符合参数1正则规则的符号将字符串分割成字符串数组
#若出现连续的分隔符或头尾出现分隔符,左侧会被多拆分一个空字符串出来,而末尾不会
String[] split = a.split(String regex);
#【正则3】正则匹配:返回a是否满足参数正则规则
boolean matches = a.matches(String regex);
#【正则4】分组
java.util.regex.Matcher; #^$ 整体匹配
java.util.regex.Pattern;
Pattern p=Pattern.compile(regex); #正则对象
Matcher m=p.matcher(content); #匹配对象
boolean b=m.find(); #内容是否匹配正则
int count=m.groupCount(); #若匹配,提取分组数量
String group=m.group(int n); #提取第n个分组的内容
5.数学
#精度
long round = Math.round(1.234);
double ceil = Math.ceil(1.0001);
double floor = Math.floor(1.999999);
BigDecimal bigDecimal = new BigDecimal(1.2345).setScale(3, RoundingMode.HALF_UP);
#幂
double pow = Math.pow(8, 1.0/3);
#对数
public static double log(double value,doub1e base){
return Math.log(value)/Math.1og(base);
}
#其他
Num c=Math.min(Num a,Num,b);
Num c=Math.max(Num a,Num,b);
final double PI=Math.PI;
final double E=Math.E;
Num abs=Math.abs(Num n); #绝对值
double radians=Math.toRadians(double degree);#角度转弧度
double degree=Math.toDegree(double radians);#弧度转角度
6.Arrays
List<T> list = Arrays.asList(t1....tn);
String str=Arrays.toString(T[] ts);#T若为自定义类型需重写toString()方法
boolean equals=Arrays.equals(T[] ts1,T[] ts2);#两个数组比较
Arrays.sort(T[] ts,Comparator<T> cmp);
Arrays.sort(T[] ts);#T若为自定义类型需要实现Comparator<T>接口要重写comparaTo方法
int pos= Arrays.binarySearch(T[] ts,T key,Comparator<T> cmp);
7.System
long l = System.currentTimeMillis();
System.arraycopy(T[] src,int fromSrcIx,T[] dest,int fromDesIx;int size);
#了解
System.gc();#通知或建议虚拟机进行垃圾回收
System.setProperty(String key,String value);#设置当前工程运行时环境共享变量(工程内共享)
String my=System.getProperty(String key);
System.getenv(String key);#获取当前jvm运行的操作系统环境变量(工程间共享)
long nanosec=System.nanoTime();