Java常用类的概述
字符串相关的类
String类及常用方法
String类
String类:代表字符串。Java中所有字符串字面值都作为此类的实例实现
String类是一个final类,代表不可变的字符序列,不可被继承。实现了Serializable接口,表示字符串是支持序列化的。实现了Comparable接口,表示String可以比较大小。
字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改
String对象的字符内容是存储在一个字符数组value[]中(final char[] value)
通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中,字符串常量池中是不会存储相同内容的字符串的。当对字符串重新赋值或者进行连接操作或者调用replace()方法时,需要重新指定内存区域赋值,不能使用原有的value进行赋值
String可以通过字面量定义的方式和通过new+构造器的方式来实例化,通过new+构造器的方式进行实例化,数据时保存在堆中
面试题:String s = new String(“abc”);方式创建对象,在内存中创建了几个对象? 两个:一个是堆空间中new结构,另一个是char []对应的常量池中的数据
字符串拼接:常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量;只要其中有一个是变量,结果就在堆中;如果拼接的结果调用intern()方法,返回值就在常量池中
常用方法
方法列表
int length():返回字符串的长度
char charAt(int index):发挥某索引处的字符
boolean isEmpty():判断是否是空字符串
String toLowerCase():将所有字符转换成小写
String toUpperCase():将所有字符转换成大写
String trim():返回字符串的副本,忽略前导空白和尾部空白
boolean equals(Object obj):比基奥字符串的内容是否相同
boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
String concat(String str):将指定字符串连接到此字符串的结尾。等价于用”+”
int compareTo(String anotherString):比较两个字符串的大小
String substring(int beginIndex):返回一个新字符串,它是此字符串从beginIndex开始截取到最后的一个子字符串
String substring(int beginIndex, int endIndex):返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)一个字符串
boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始
boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定的前缀开始
boolean contains(CharSequence s):当且仅当此字符串包含指定的char值序列时,返回true
int indexOf(String str):返回指定子字符串在此字符串中第一次出现的索引
int indexOf(String str, int fromIndex):返回指定字符串在此字符串中第一次出现处的索引,从指定的索引开始
int lastIndexOf(String str):返回指定子字符串在此字符串中最后一次出现处的索引
int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索
indexOf和lastIndexOf方法如果未找到都是返回-1
String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的
String replace(CharSequence target, CharSequence replacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串
String replaceAll(String regex, String replacement):使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串
String replaceFirst(String regex, String replacement):使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串
boolean matches(String regex):告知此字符串是否匹配给定的正则表达式
String[] split(String regex):根据给定正则表达式的匹配拆分此字符串
String[] split(String regex, int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部放到最后一个元素中
String与基本数据类型的转换
字符串 -> 基本数据类型、包装类
Integer包装类的public static in parseInt(String s)可以将由数字字符组成的字符串转换成整型,类似的,Byte、Short、Long、Float、Double类可以使用parseXxx方法转换成相应的类型
基本数据类型、包装类 -> 字符串
调用String类的public String valueOf(int n)可以将int类型转换为字符串……
String与char[]之间的转换
字符数组 -> 字符串
String类的构造器:String(char[])和String(char[], int offset, int length)分别用字符数组中的全部字符和部分字符创建字符串对象
字符串 -> 字符数组
public char[] toCharArray():将字符串中的全部字符存放在一个字符数组中的方法
public void getChars(innt srcBegin, int srcEnd, char[] dst, int dstBegin):提供了将指定索引范围内的字符串存放到数组中的方法
String与byte[]之间的转换
字节数组 -> 字符串
String(byte[]):通过使用平台默认字符集解码指定的byte数组,构造一个新的String
String(byte[], int offset, int length):用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象
字符串 -> 字节数组
public byte[] getBytes():使用平台默认字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中
public byte[] getBytes(String charsetName):使用指定的字符集将此String编码到byte序列,并将结果存储到新的byte数组
StringBuffer、StringBuilder
String、StringBuffer、StringBuilder三者的异同?
String:不可变的字符序列;
StringBuffer:可变的字符序列;线程安全的,效率低;
StringBuilder:可变的字符序列;线程不安全,效率高
三者底层都是使用char[]存储的
StringBuffer的常用方法
- StringBuffer apped():用于字符串的拼接
- StringBuffer delete(int start, int end):删除指定位置的内容
- StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
- StringBuffer insert(int offset,xxx):在指定位置插入xxx
- StringBuffer reverse()把当前字符串反转
效率对比
StringBuilder > StringBuffer > String
JDK8之前的日期时间API
System静态方法
- System.currentTimeMillis()
Date类
//java.util.Date
//构造器一:Date() 创建一个对应当前时间的Date对象
Date date1 = new Date();
System.out.println(date1.toString());//显示时间
System.out.println(date1.getTime());//显示时间戳
//构造器二:Date(long date) 创建指定时间戳的对象
Date date2 = new Date(1657001624802L);
System.out.println(date2.toString());
//java.sql.Date
java.sql.Date date3 = new java.sql.Date(1657001624802L);
System.out.println(date3);
//java.util.Date和java.sql.Date互相转换
java.util.Date date4 = new java.util.Date();
java.sql.Date date5 = new java.sql.Date(date4.getTime());
java.util.Date date6 = (java.util.Date) date5;
Calendar类
- Calendar类是一个抽象类基类,主要用于完成日期字段之间相互操作的功能
- 获取Calendar实例的方法
- 使用Calendar.getInstance()方法
- 调用它的子类GregorianCalendar的构造器
- 一个Calendar的实例时系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY、MINUTE、SECOND
- public void get(int field)
- public void set(int field, int value)
- public void add(int field, int amount)
- public final Date getTime()
- public final void setTime(Date date)
- 注意
- 获取月份时:一月是0,二月是1,以此类推,十二月是11
- 获取星期时:周日是1,周一是2…周六是7
SimpleDateFormat类
Date date = new Date();
String format;
//默认构造器
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat();
format = simpleDateFormat1.format(date);
System.out.println(format);
//带参构造器
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//格式化
format = simpleDateFormat2.format(date);
System.out.println(format);
//解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现)
Date parse = simpleDateFormat2.parse("2022-07-06 11:09:29");
JDK8中新日期时间API
LocalDate、LocalTime、LocalDateTime
/*
LocalDate、LocalTime、LocalDateTime
LocalDateTime使用频率较高
*/
//now() 获取当前的日期、时间、日期+时间
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);//2022-07-06
System.out.println(localTime);//11:57:26.678
System.out.println(localDateTime);//2022-07-06T11:57:26.678
//of() 设置指定的年月日时分秒
LocalDateTime localDateTime1 = LocalDateTime.of(2022, 7, 7, 13, 5, 20);
System.out.println(localDateTime1);
//getXxx() 获取相关的属性
System.out.println(localDateTime.getYear());
System.out.println(localDateTime.getDayOfYear());
//withXxx() 设置相关的属性
LocalDateTime localDateTime2 = localDateTime.withYear(2023);
//plusXxx() 在原来的时间上增加
LocalDateTime localDateTime3 = localDateTime.plusYears(1);
//minusXxx() 在原来的时间上减少
LocalDateTime localDateTime4 = localDateTime.minusYears(1);
Instant
/*
Instant的使用
*/
//now() 获取本初子午线对应的标准时间
Instant instant = Instant.now();
System.out.println(instant);//2022-07-06T05:51:20.949Z
//atOffset() 添加时间偏移量
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);//2022-07-06T13:51:20.949+08:00
//toEpochMilli() 获取对应的毫秒数(时间戳)
long milli = instant.toEpochMilli();
System.out.println(milli);
//ofEpochMilli() 通过给定的时间戳获取Instant实例
Instant instant1 = Instant.ofEpochMilli(1657086785000L);
System.out.println(instant1);
DateTimeFormatter
/*
DateTimeFormatter 格式化或解析日期时间
*/
//方式一:预定义的标准格式
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
//格式化:日期 -> 字符串
LocalDateTime localDateTime = LocalDateTime.now();
String format = dateTimeFormatter.format(localDateTime);
System.out.println(localDateTime);
System.out.println(format);
//解析:字符串 -> 日期
TemporalAccessor parse = dateTimeFormatter.parse("2022-07-06T14:04:37.736");
System.out.println(parse);
//方式二:本地化相关的格式
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
//方式三:自定义的格式
DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
//格式化
String format1 = dateTimeFormatter2.format(LocalDateTime.now());
System.out.println(format1);
//解析
TemporalAccessor parse1 = dateTimeFormatter2.parse("2022-07-06 02:14:29");
System.out.println(parse1);
其他类
- ZoneId:该类中国包含了所有的时区信息,一个时区的ID,如Europe/Paris
- ZoneDateTime:一个在ISO-8601日历系统时区的日期时间
- 其中每个时区都对应着ID,地区ID都为“{区域}/{城市}”的格式
- Clock:使用时区提供对应当前即时、日期和时间的访问的时钟
- Duration:持续时间,用于计算两个时间间隔
- Period:日期间隔,用于计算两个日期间隔
- TemporalAdjuster:时间校正器
- TemporalAdjusters:该类通过静态方法(firstDayOfXxx()/lastDayOfXxx()/nextXxx())提供了大量的常用TemporalAdjuster的实现
Java比较器
Comparable接口
Comparable接口的使用举例
1.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式
2.重写compareTo(obj)的规则
如果当前对象this大于形参对象obj,则返回正整数
如果当前对象this小于形参对象obj,则返回负整数
如果当前对象this等于形参对象obj,则返回零
3.对于自定义类来说,如果需要排序,可以让自定义类实现Comparable接口重写compareTo(obj)方法,在compareTo(obj)方法中指明如何排序
Comparator接口
- 当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparator接口的排序规则不适合当前的操作,那么可以考虑使用Comparator的对象来排序,强行对多个对象进行整体排序的比较
- 重写compare(Object o1, Object o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2
- 可以将Comparator传递给sort方法(如Collection.sort或Array.sort),从而允许在排序顺序上实现精准控制
- 还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象Collection提供排序
String[] arrs = new String[]{"sddhfs","vijijse","oihfler","khvalsk","joilf"};
Arrays.sort(arrs, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return -o1.compareTo(o2);
}
});
System.out.println(Arrays.toString(arrs));
System类
System类代表系统,系统级的很多属性和控制方法都放置在该类的内部,该类位于java.lang包
由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用
成员变量
- System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)
成员方法
native long currentTimeMillis()
该方法的作用是返回当前的计算机时间,时间的表达式格式为当前计算机时间和GMT时间所差的毫秒数
void exit(int status)
该方法的作用时退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等
void gc()
该方法的作用时请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况
String getProperty(String key)
该方法的作用是获得系统中的属性名为key的属性对应值,系统中国常见的属性名以及属性的作用如下表所示
| 属性名 | 属性说明 |
| :———-: | —————— |
| java.version | Java运行时环境版本 |
| java.home | Java安装目录 |
| os.name | 操作系统的名称 |
| os.version | 操作系统的版本 |
| user.name | 用户的账户名称 |
| user.home | 用户的主目录 |
| user.dir | 用户的当前工作目录 |
Math类
java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double类型
- abs 绝对值
- acos,asin,atan,cos,sin,tan 三角函数
- sqrt 平方根
- pow(double a, double b) a的b次幂
- log 自然对数
- exp e为底指数
- max(double a, double b)
- min(double a, double b)
- random() 返回0.0到1.0的随机数
- long round(double a) double型数据a转换为long型(四舍五入)
- toDegrees(double angrad) 弧度->角度
- toRadians(double angdeg) 角度->弧度
BigInteger与BigDecimal
Integer类作为int的包装类,能存储的最大整型值为2的31次-1,Long类也是有限的,最大为2的63次-1.
java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger提供所有Java的基本整数操作符的对象物,并提供java.lang.Math的所有相关方法。另外,BigInteger还提供以下运算:模、GCD计算、质数测试、素数生成、位操作以及一些其他操作
构造器
- BigInteger(String val) 根据字符串构造BigInteger对象
常用方法
- public BigInteger abs() 返回绝对值
- BigInteger add(BigInteger val) 返回值为this+val的BigInteger
- BigInteger subtract(BigInteger val) 返回值为this-val的BigInteger
- BigInteger multiply(BigInteger val) 返回值为this*val的BigInteger
- BigInteger divide(BigInteger val) 返回值为this/val的BigInteger,整数相除只保留整数部分
- BigInteger remainder(BigInteger val) 返回值为this%val的BigInteger
- BigInteger[] divideAndRemainder(BigInteger val) 返回值为this/val后跟this%val的两个BigInteger的数组
- BigInteger pow(BigInteger val) 返回值为this的val次方的BigInteger
一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中,要求数字精度比较高,故用到java.math.BigDecimal类。
BigDecimal类支持不可变的、任意精度的有符号十进制定点数。
构造器
- public BigDecimal(double val)
- public BigDecimal(String val)
常用方法
- public BigDecimal add(BigDecimal augend)
- public BigDecimal subtract(BigDecimal subtrahend)
- public BigDecimal multiply(BigDecimal multiplicand)
- public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
发表评论